Contents Page (for older versions of NT)
WFTPD Pro Contents Page

Note: If you see this page on Windows 2000, Windows NT 4.0 or Windows 95/98, then the WFTPD.CNT file is either missing or corrupt - you should refresh it from your original installation set.

Introduction to WFTPD Pro

•	Overview of WFTPD Pro

•	What makes WFTPD Pro different from WFTPD?

•	What is new in this version?

•	What is planned for future versions?

How To:

•	Install WFTPD Pro

•	Create a new server

•	Prepare your server for use

•	Convert WFTPD servers to WFTPD Pro

Trips and Ticks:

•	Deciding what IP address and port you should use

•	Keeping your servers separated

Troubleshooting / Development:

•	Details of the WFTPD Pro entries in the registry

•	Contents of a WFTPD.INI file (from WFTPD)

•	Warning messages

•	Winsock error codes

Frequently Asked Questions (FAQ):

•	How can I contact you for support questions?

•	How can I order more copies?

•	Will I get free upgrades?

•	What discounts are available?

•	How can I get a copy of your source code?

•	How can I access network drives?

•	Is WFTPD Pro Multi-threaded?  Should it be?

•	Why can’t WFTPD Pro find my user’s home directory?


Control Panel Main Dialog

WFTPD Pro’s main dialog consists of two main windows - the Server List, and the User List.  The Server List displays all servers currently defined on your local machine, and the user list shows the active users on the currently selected server.

[Note that Clients 1 and 9 have failed to start, and that we can see the reason why if we click on the server’s name]

The Server List

The Server List displays the following columns, from left to right:

Server Status	-	A graphical indication of whether the server is [image] stopped, [image] enabled but not running, [image] running, or [image] encountered a fatal error.  If your server did encounter a fatal error, select it to display what the error was in the text over the User List.
Server Name	-	The name of the server (as assigned by you in the New Server dialog ).
IP Address	-	The address that the server will listen at for incoming connections - usually the address that users will tell their ftp clients to connect to, with the exception of the special address "0.0.0.0", which is an internet standard for "any".  A server listening at address "0.0.0.0", on a particular port, will accept all incoming connections to this machine on that port.
Port	-	The port that the server will be listening on.  The default port for ftp is 21 - any server running on a different port will be harder for your users to find and connect to - this may be useful, if you are trying to ‘hide’ your server.  Bear in mind, however, that ‘serious’ hackers will use port scanners to find open ports no matter where you hide them.  You can use either a numerical value, such as ‘21’, or the name of the service such as ‘ftp’.
You can select a server simply by clicking on its name in the server list.  Double clicking a server’s name takes you to the Server Configuration property sheet just as the “Configure…” button would, with the Security Configuration Page active.

Underneath the Server List, you will see four buttons that relate to the servers in the list:

New Server…	-	takes you to the New Server dialog , where you may add a new server, by defining its name, and what address and port it will listen on.
Delete Server	-	deletes all settings relating to the currently selected server.  Since this is irrevocable, and deletes a large chunk of information about that server, a confirmation box will appear whenever you click this button.
Configure…	-	opens the Server Configuration property sheet for the selected server, with the Security Configuration Page active - equivalent to double-clicking on that server’s name.
Go / Stop	-	starts or stops the current server.  Note that stopping a server will abruptly disconnect all users currently logged in to it.
The User List

If the system being configured is the local system, the User List window displays the following columns, from left to right:

User Name	-	the names of users connected to the server.  If the name is surrounded in quotes, this indicates that the user logged in as "anonymous" or "ftp" - the string displayed in quotes in the User Name column is what was given for a password.  It is an old Internet convention that a polite user will place his or her email address in the password for an anonymous ftp access session.
ID Number (#)	-	a unique number associated with each session.  This makes it a little easier to keep track of which session is doing what.
IP Address	-	the numerical IP address of the site that the user connected from - useful in determining who might merit being permanently barred from your site, in the Network Security Page of the Server Configuration property sheet .
Command	-	The last command the client sent to the server - this is an FTP command, and may not necessarily look like the command they typed.
Status	-	The current status of the last command - e.g. "Success", "Fail", "80%", "420k", etc.
You can select any individual user simply by clicking on that user’s name.  Multiple selections can be made in the usual Windows way - by holding down the Ctrl key while clicking (to add the user to, or remove the user from, the selection), or by holding down the Shift key while clicking (to select a range of users).

Double-clicking a user’s name does nothing at present.  Disconnecting users is too sever an action to be taken so easily - to disconnect a user (or more than one), you must select the user(s) and then click the "Disconnect" button.

If you can not see all the columns of the User List, you may either use the scrollbar, or resize the dialog.

Under the User List are the following two buttons:

Disconnect	-	disconnects the selected user(s)
Disconnect All	-	disconnects all connected users (similar to stopping and re-starting the server)
Service Control

The three buttons used for controlling the service are as follows:

Start / Stop Service	-	Starts or stops the service, depending on its current state.  Starting and stopping a service can take several seconds, or on rare occasion, into minutes, depending on which services WFTPD Pro may need to start or stop.  Stopping the WFTPD Pro Service will stop any currently active servers.
Close	-	Closes the WFTPD Pro Control Panel Applet - this does not stop the service, or any of the servers.
Help	-	Calls up this help file.

Remote Administration

There are three controls related to administering remote system - the first is a text box displaying the name of the NT system currently being administered - when you start the Control Panel Applet, it will display the name of the NT system that you are logged in to.

The "Remote System" button will offer you a dialog in which you can enter the name of a new system to administer.  Note that you will not be able to view the list of current users on the remote system.

The "Local System" button will bring you back to administering the local system.

It is not currently possible through the Control Panel Applet interface to monitor and disconnect users logged into remote servers.


Messages Page

The "Messages" page allows you to view, and configure, actions taken when users log in our out, or when they change a directory.  You may configure WFTPD Pro to send a custom message at each of these operations.

The "Greeting Action" frame lists what will happen when a user logs in, and allows you to alter that setting by pressing the "Configure" button.  In our example above, a message will be displayed to the user, and a sound will be played.

The "Farewell Action" frame works the same way, but refers to those actions taken when a user logs out.

The "Configure" button in each frame takes you to the Message Update dialog.

The "Display MESSAGE.FTP file on each directory change" check box refers to actions carried out when a user changes to a new directory - if the box is checked, and there is a file called MESSAGE.FTP in the new directory, the contents of this file will be displayed to the user.  Any "Magic Cookies" inside the file will be expanded.  If this box is unchecked, then no special action takes place on a change of directory.


Logging Page

The "Logging" page allows you to alter whether logging information is stored, and in what file it will be stored.  This page also allows you to fine-tune what level of information you would like to see logged.

The log file contains one line per log entry; each line starts with a key in square brackets "[ ]" - the first character of this key is one of the following, to indicate what type of information is in that log line:

Always logged:

>	Log message too long - you should not generally see this - please report it to me if you do.  If this message appears, it may be an indication that someone is attempting to crash your server.  Since we trap this error, it is unlikely that they will succeed.
*	Shareware warnings - these are only present in WFTPD shareware logs, not in registered WFTPD Pro logs.  The key is included here for completion only.
#	Information - usually items like what IP address you are listening to, and what port you are listening on.

Selectable:

!	Warnings - file errors, home directory not found, etc.
C	Commands - passwords are NOT logged, except for anonymous users.
A	Anonymous logins - any time someone logs in as "anonymous" or "ftp"
L	Logins - any time someone logs in as a non-anonymous user.
G	Gets - sent when a download from the server starts, and when it finishes, or is interrupted.
P	Puts - sent when an upload to the server starts, and when it finishes, or is interrupted.
?	Winsock Calls - only to be enabled if you are trying to trace problems in conjunction with our technical support.

When you decide what to log, you can enable or disable each selectable item through the appropriate check box.  You will also want to decide where to store that log, by entering a log file name into the edit box.  We recommend using the "Browse" button to locate where you will place your new log file, or to locate an existing log file.  When using the "Browse" button, you are always more sure that the directory exists, and that you have not mistyped it.

Lastly on this page, the "Enable Logging" check-box allows you to suspend and re-enable logging without having to un-check, or re-check, each check box.


Security Page

The "Security" page is where most of the more general security settings are made, that would not fit under any of the other categories of pages.  Most settings that are global to the server are configured here.

This page is perhaps wrongly named, since there are many security-related settings in the other pages.  However, this is where you can make the coarsest adjustments to your server’s security.  In particular, take careful note of the "Enable Security" checkbox - if this is unchecked, then no other security settings will be noticed - a client can use any user name and password combination, even none at all, and will have full access to any area on your system.

The other general check boxes on this page include:

Allow Uploads	When checked, those users with sufficient rights to do so can upload to your site.  When unchecked, no users are allowed to upload, no matter what rights they are assigned.  "Uploads" in this sense also describes any act that would affect the file system - directory creation, file deletion, etc.
Allow "Anonymous" Logins	When checked, the special "anonymous" user can log in.  When unchecked, such a login is disallowed.
Allow "Anonymous" users to upload	Because of the rather open nature of the "anonymous" account, and its general lack of authentication, you may want to use this check box to prevent, or allow, modifications to your file system by the "anonymous" user.  Note that if the "Allow Uploads" box is unchecked, then the “anonymous” user is not able to upload.  Also, the "anonymous" user’s access will never exceed the rights assigned to it.
Beneath these check boxes, you will find an edit box and "Browse" button allowing you to choose to restrict this server to a specific sub-tree of your directory structure.  If you choose to do this, that directory will appear to be the root of this server and only those files in or underneath that directory will be accessible to anyone logging in to this server.  Note that the users’ home directories are still to be specified as absolute paths, not relative paths from the server’s root.  At some later stage in WFTPD Pro’s development, we may allow users’ home directories to be specified as relative to the server root, so that servers can be moved between drives and even machines without disturbing their users.  If a user’s home directory is not a subdirectory of the server root, that user will not be able to log in.  Note that remote administration provided through the FTP control connection is always restricted by this choice of directory; administration through the control panel is not so restricted.

Next, let’s talk about the three numbers - "Maximum User Count", "Idle Timeout" and “Failed Logins Before Disconnect”.

The Idle Timeout is present because there are many situations where an FTP server can not detect that a user has been disconnected, or is simply inactive.  In those situations, the FTP server (in this case WFTPD Pro) can only wait patiently, and eventually decide that the client is not communicating and can be disconnected.  This frees up the socket, and any files that were opened by that client, but if set too short can cause problems for anyone that is merely a slow worker.  A typical value for the timeout would be between 5 and 10 minutes - since the timeout is specified in seconds, this would be 300-600 seconds.  A value of 0 indicates no timeout - such a value may cause resource loss, and file locking, and is not recommended in general use.

The Maximum User Count is the number of users allowed to be simultaneously connected to this server.  The best value for this is generally determined by trial and error - there is no simple formula for this, since it depends partly on your bandwidth, but mostly on the users connecting to your site, and the nature of the transfers they will be carrying out.  A setting of 0 again means no limit.

The Failed Logins Before Disconnect indicates how many attempts a connected client will get at guessing the user name and password combination.  This value, combined with the fact that WFTPD and WFTPD Pro will wait for five to ten seconds after each failed attempt, will restrict the possibility of brute-force attacks against your user and password list.

Finally, there are the "Advanced Network Security" settings.

"Disable proxy data connections", once checked, disallows any attempt to do data transfers or file listings to or from any site other than the client that initiated the control connection requesting those transfers.  This is a rather long-winded way of saying that users will be able to log in to your site, transfer files and get file listings, but they will not be allowed to request that this server sends those files or listings to other sites, or retrieves files from other sites.  Proxy transfers, as they are known, occur when one FTP client controls two FTP servers, and transfers files or listings between the two servers without going through the client.  While this is a useful feature to a small number of users, it can also be abused, and can represent a security risk.  We recommend disabling proxy transfers unless you know that your users have good reason to use them.

"Do not connect to low (<1k) port numbers" - this setting prevents WFTPD Pro from accepting requests to send or receive data to / from port numbers under 1024.  These port numbers are often known as "reserved" port numbers, and are generally used for system services (such as FTP, mail, etc).  As such, requests to send data to these ports are often signs that hackers are trying to use your system to hide their activities.  Some old, or poorly written FTP clients request low port numbers, which is why in WFTPD Pro we allow you to enable this feature.


Users / Rights Page

This page is where new users are created, and those settings associated with each user, such as their password, home directory, and rights, are made.

The "User Name" field is a simple list-box, showing the currently created users.  Two special user names warrant immediate discussion:

"default" isn’t actually a user, and can’t ever log in.  However, rights assigned to "default" are also assigned to any user whose rights are not yet assigned.  When "default" is selected as a user, you may only make changes to the rights assigned to default.

"anonymous" is a real user, and can log in, as long as you have enabled anonymous login on the Security Page and have provided the user with a home directory.  If your users find "anonymous" too long to type for guest access, we follow the common standard of accepting "ftp" as being the same as “anonymous”.  We recommend marking the "anonymous" user as "Restrict to home and below" [this is the default we set on the “anonymous” user], since this is essentially a public access account, and should be secured as carefully as possible.  If you have no need for public access to your system, then we recommend disabling the login from the Security Page .  The "anonymous" user is generally used for providing free access to a portion of your system, and some of the uses it has been put to are as follows:

anonymous Uploading:

•	Project data files for technical support.

•	Literary submissions for publication.

•	Freeware / shareware submissions for archive sites.

•	Any other purpose where people might wish to send data to you, but where you would not wish to spend the time to create a specific user account.

anonymous Downloading:

•	Bug fix / patch files.

•	Freely available software - drivers, tools, etc.

•	Knowledge base articles, common questions for tech support.

•	Any other purpose where you might want people to fetch data from you, but where you do not need to create a specific user account.

Note that with appropriate application of rights , a directory can be made "upload-only", by giving it Create rights, but not Read, List or Overwrite.  A directory can also be made "read-only", by giving Read and List rights, but not Create or Overwrite.  By giving Read rights, but not List, a small amount of protection can be given to a directory, but this is not to be thought of as very secure.

You will want to monitor the "anonymous" user’s accesses very carefully - there is no way to determine who is truly connected through that user account, and many software pirates use unmonitored "anonymous" upload areas to swap stolen software (known as “warez”).  Since the "anonymous" user can have no password, the "Set Pass…" button is disabled.

Other than "anonymous" and "default", there are no other ‘special’ user names, and any action you do to one user will be equally applicable to any other.

There are three further buttons under the "User Name" list box:

Set Pass...	brings up the Set User Password dialog box, so you can change the selected user's password.
Delete User	deletes the current user, and all settings associated with that user.
Create User...	brings up the Create New User dialog box, allowing you to add another user to the list.
Underneath those buttons, we find:

"Restrict to home and below" - a check-box which, when checked, disables any access by that user to any directory above the user's home directory, or away from the drive where the home directory resides.  To re-enforce this, that user will not even see any path component above the home directory.  For instance, a user whose home directory was "C:\USERS\CHARLIE" would be able to access the following directories:

Directory Name:		Seen by user as:
C:\USERS\CHARLIE		/
C:\USERS\CHARLIE\FRIED		/FRIED
C:\USERS\CHARLIE\X\Y2		/X/Y2
C:\USERS\CHARLIE\WHATEVER\REALLY\LOTS\OF\ELEMENTS		/WHATEVER/REALLY/LOTS/OF/ELEMENTS
This user would not have access to directories "C:\USERS\CHARLES", "C:\USERS\FRED", "C:\USERS" or "D:\ANYTHING".  These are just examples, and the principle should be obvious.  Note especially that this user won't be able to access directory "C:\USERS\CHARLIESAUNT", even though they start the same, since that is not a sub-directory of the user's home.

"Home Directory" is the directory that the user will log in to each time the user accesses the server, and that the user may be restricted to (see above). The "Browse" button may be used to find this directory easily, and also guarantees that the directory you've entered does exist.  Back-slashes and forward-slashes ("\" and "/") are equally acceptable to separate path elements - when paths are displayed to an FTP client, forward-slashes are always used; when paths are sent to the operating system, stored in the registry, etc, back-slashes are always used.

Rights for user ...

The right-hand half of this page is devoted to the actions that a user is able to do in any particular directory or sub-directory thereof.  Any rights assigned to a directory are 'inherited' by sub-directories, unless those sub-directories have specific rights of their own.  For instance, any rights assigned to a user in directory "C:\USERS\CHARLIE" will by default apply to "C:\USERS\CHARLIE\PATH1\PATH2\PATH3\PATH4" and all directories in between.  Assigning a different set of rights to that user in directory "C:\USERS\CHARLIE\PATH1\PATH2" would affect only directories from that point down, including (in our example) "C:\USERS\CHARLIE\PATH1\PATH2\PATH3" and "C:\USERS\CHARLIE\PATH1\PATH2\PATH3\PATH4".

The directory list shows all directories that have rights assigned for this user.  You may add new directories to this list by either typing them in, or using the "Browse" button underneath the list (recommended).  The special directory "*" (without the quotes) may be entered to signify that the appropriate rights apply to all directories that have no rights assigned to them, either specifically, or by inheriting them from their parents.  Note when entering a directory that it will not enter the list until you alter the rights assigned to it.  After all, it is either inheriting its rights already from a parent, or from "*", or from rights assigned to the default user - it would be a waste of space to add it to the list if it specified rights that were already implicitly assigned to it.

The rights that may be assigned to any directory are as follows:

Read	The user can read files in any directory where this right applies, allowing them to download files.
List	The user can list the contents of any directory where this right applies, except for files the operating system has marked as "hidden".
Create	The user can create and write to new files - allowing them to upload files and create new directories, for instance.
Overwrite	The user can carry out actions that alter existing files, overwriting them, or deleting them.
(Note that some operations may require more than one of these rights to complete - for example, a file rename requires Create and Overwrite!)


Network Security Page

The Network page allows you to decide where you'll accept connections from, and who you'll refuse access to.  And, if the server isn't running, you can alter the IP address and port that it'll listen on when it starts up next.

The two fields at the top, "Listen at IP address " and "Port ", are only editable while the server is not running, since it would not be prudent to change a server's location in mid-run.  They represent the IP address and port that the server will be listening at.

Usually, you will want to leave the port at 21, or "ftp".  Some people like to run servers at different ports, either to ‘hide’ them, or just to be weird.

If you set the IP address to 0.0.0.0, the server will accept all incoming TCP connections to the selected port, no matter what address on your machine the connection was made to (as long as it reached your machine!).  If you are running several servers on different IP addresses, you will almost certainly not want to set any server to accept connections to 0.0.0.0, as this may prevent those servers from starting.

The radio-button "Deny/Allow" allows you to decide whether to refuse or accept incoming connections as a rule.

Exceptions are set in the list underneath these radio buttons, by typing in the edit box an IP address or host name that you wish to make an exception for, and then pressing the "Add" button.  To remove an exception placed on a site, select it in the list, and press the "Delete" button.  If you enter a '*' for one of the parts of the IP address/name, that will match any sequence of zero or more characters in the IP address or name.  For example, if you had set the default action to "Allow" anyone to access your site, and then entered "207.68.156.*" as an exception, you'd keep anyone on the network hosting the Microsoft web-site from accessing your machine.  To be even more mean to the folks at Redmond, you could even place an exception of "*.microsoft.com".

The check box "Name required for each host" dictates whether WFTPD Pro will wait for the results of its query for the FTP client's system name.  Waiting for the name information can add anything from several seconds to a few minutes on to the initial connection time, but is obviously required if you want to be able to restrict access based on the incoming host's name, rather than just on its numerical IP address.

The “Owner’s Email” text box may be used to provide the contact address of the server’s administrator, to be displayed whenever the “%E” cookie is found in either a MESSAGE.FTP file, or a greeting/farewell message.  [There’s no technical reason for this to not be an email address - the original design was for the email address, since this was likely to change, and yet was required to be in many documents]


New Server Dialog

The New Server dialog appears when you press the "New Server…" button on the Main dialog:

You can give your new server a name (currently, there is no "rename" facility, short of editing the registry), and tell it what address and port it should listen on.  The default for the IP address and port are 0.0.0.0 and "ftp" respectively.  This dialog will only verify that the numeric IP addresses and port numbers are valid - it cannot easily validate that you have entered a good site name or port name, and anything other than numeric values will be accepted without verification or complaint.  Note that the IP address must be one that your machine supports, or the server will not start up.


Greeting / Farewell Dialog

The Greeting/Farewell Message Update dialog allows you to decide what actions take place when a user logs in (greeting) or logs out (farewell).

The large edit box is for entering a message that the user sees when they first connect to your site or when they finally leave it.  I would suggest keeping this to about 70 characters wide, and no more than 20 lines - many client systems connecting to your site may be using dumb terminals and/or DOS-mode ftp clients.  A three-digit number, along with either a space or a hyphen, will prefix each line on display. We suggest that your message should not contain any angle brackets - with the number of people using web browsers to access FTP servers, angle brackets in greeting messages could be misconstrued as HTML code.

%T	Local time (the format is "Thu Nov 15 17:12:42 1990")
%F	Free space in partition of current directory (in kilobytes)
%C	Current working directory
%E	The owner's email address as defined in the Network Page
%R	Remote host name
%L	Local host name
%U	User name given at login time
%M	Maximum allowed number of users
%N	Current number of users
%%	The ‘%’ character
Some cookies may not always be available - the current working directory, for instance, requires you to be logged in.  The remote host name takes a little while to be resolved, and may not always get fully resolved.  These cookies display a brief note when unavailable, in curly brackets.

You can also decide whether or not the server machine should play a sound (*.WAV) file when a user logs in/out - the check-box at the lower left, labeled "Play sound on login" or "Play sound on logout" decides this.  The large button next to this contains either nothing, or the path name to your WAV file - when it is empty, the "default" sound is picked from the resources in the WFTPD Pro executable.  You can always re-empty the contents by pressing the "Default Sound" button.  If you press the button where the file name and path will go, you will be given a File Open dialog, allowing you to select the WAV file to play.  Once selected, you can play the sound by pressing the "Test Sound" button.  Note that the sound is played on the server machine, and is NOT sent to the client logging in.


New User Dialog

This dialog allows you to create a new user by typing their user name in.  Note - this does not need to be their full name, or even necessarily anything related to their name - it is simply an identifier used for authentication.


Set Password Dialog

Both the Password and Verification fields must match before you may use OK to end this dialog.  Passwords may be up to thirty-two characters long, and are case sensitive.  For obvious reasons of security, you will not be able to see what you are typing, because "*" characters will be displayed for every character you type.


WFTPD Pro Overview

WFTPD Pro is the 'big brother' to Texas Imperial Software's mainstay for the last several years, WFTPD.  Like WFTPD, it offers an FTP service of great speed, and unparalleled stability and compatibility.  WFTPD was the first standalone Windows FTP server when it was offered in late 1993, and its basic engine has been continually improved on ever since then.  WFTPD Pro makes use of that development history, by using the same basic engine to provide a much more powerful FTP service.

If your Windows NT system is Winsock-compliant (and that is almost certain, if you have TCP/IP installed), WFTPD Pro may be installed to run unattended and provide FTP access to your system, while not interfering noticeably with the day-to-day use of your system for other purposes.

WFTPD Pro provides the ability to control multiple servers on multiple machines through one simple interface - a control panel applet.  Servers are independent entities - the only effect that is global to all servers is to start or stop the WFTPD Pro Service itself - since starting the service will start up all enabled servers, and stopping the service will stop all currently running servers.

Using WFTPD Pro, you can implement what is often known as a "virtual server", or "multi-homed" FTP service.  This allows you to make one Windows machine connected to the Internet look like several different FTP sites, each with a different IP address, a different user list, and different files available.  This is a great tool for people providing Internet Services to customers who want a 'presence' on the net, allowing those Internet Service Providers to use a small number of systems to serve a large number of companies, greatly reducing the costs of running such a business.  By restricting these servers to different directories, you may make these virtual servers appear to be totally separated; they use different user databases (so a user "fred" on server "Pink" would be given a different password, different access rights, etc, from a user "fred" on server "Red").

WFTPD Pro has been written entirely in C++, and uses the Microsoft Foundation Classes to make Windows easier to deal with.

What WFTPD Pro is NOT

WFTPD Pro is not an FTP client.  To connect to someone else's FTP site, you will need an FTP client, such as WS_FTP or Cute FTP.

WFTPD Pro is not related to WS_FTP in any way - although the author of WS_FTP and I have regular conversations as to what features in one program might require changes made to the other.

WFTPD Pro is not an amateur program - Texas Imperial Software is a full-time concern, and our chief developer, Alun Jones, has over a decade's experience in the software industry.  We are not writing this to put ourselves through college, we are writing this to pay our mortgages, and to feed and clothe our family members and ourselves.

WFTPD Pro is not the offshoot of some big business concern - we make a living, not a killing.  Hence any unauthorized (and unpaid) use of WFTPD or WFTPD Pro hurts us individually.  On a quarterly basis, we decide whether Texas Imperial Software should continue, or if we should just go back to working for other people.  Only your continued support can guarantee continued development of WFTPD and WFTPD Pro.  Don’t distribute the registered versions of WFTPD or WFTPD Pro.


Differences betwen WFTPD and WFTPD Pro

The main engine of WFTPD Pro - while sharing much code with that of WFTPD - is written to run as a service.  The first release is for Windows NT / Windows 2000 alone, although we hope to have a Windows 95/98 version available soon.  WFTPD Pro doesn't have any 16-bit legacy code to hold it down, and its settings are stored in the registry.  WFTPD has to make some concessions to the fact that it has a 16-bit version, and its settings are stored in a .INI file [for instance, since an INI file is limited to 64K in size, it is easy to overrun that when installing a couple of hundred users].

Where WFTPD is aimed at the 'shareware' market, and has a free evaluation version available for use, WFTPD Pro is marketed in a different form - to use the software, you have to buy it.  You can base that decision on WFTPD, or be influenced by what we say about WFTPD Pro.  WFTPD Pro costs more than WFTPD, but then it's a different kind of program - WFTPD is intended to be run interactively, perhaps in the background, but definitely a part of the user's Windows "experience".  WFTPD Pro is designed to run quietly and unobtrusively, in the background - unattended.

Finally, as a service, there are some aspects of WFTPD Pro that may not be intuitively obvious.  The first of these is its inability to use drive mappings.  However, this makes perfect sense once you think about it a little; drive mappings have to be created by a logged-in user, and WFTPD Pro runs when users are not logged in.  Hence, if WFTPD Pro did use drive mappings, they would appear and disappear underneath FTP clients when users logged into, or out of, the main NT machine that was running WFTPD Pro.  This would be confusing at best and dangerous to security at worst.

WFTPD Pro runs with one particular user’s rights and abilities, as set up in the Services Control Panel Applet.  The default on installation is "LocalSystem", a special user account that allows full access to the underlying NT file system, but which has no rights to access networked resources.  Hence, UNC [Unified Naming Convention - e.g. "\\server\share\path\file"] path names will generally not immediately work, without either changing the user name that WFTPD Pro runs under or by granting LocalSystem access to remote resources.


Installing WFTPD Pro

We ship WFTPD Pro with an installation program for Windows 2000 and Windows NT 4.0, but for Windows NT 3.51 users, or anyone having problems with the automatic installation, we also provide information below for manual setup.  You must be logged on as a user with administrator privileges to complete either the automatic or the manual installation.

Whether using the manual setup, or the automatic installation, always make sure that you stop any existing WFTPD Pro service.  You can do this through the "Services" Control Panel applet.  You will then need to close the Control Panel itself - if the Control Panel is open in any window, you will not be allowed to replace the WFTPD Control Panel applet.

For the automatic installation, you must either run the self-extracting executable WFTPDPRO.EXE, if you received this file by email or FTP, or SETUP.EXE, if you received your copy of WFTPD Pro on a disk.

Manual Installation Instructions

1	Place the install files into a temporary directory - if you received the installation file by email or FTP, you should unzip the file that you received (this may require a password); if you received the installation on a floppy, then copy the files from the floppy.

2	File names whose extensions end in an underscore character ‘_’ must be expanded using the EXPAND.EXE tool supplied with Windows.  At the DOS prompt, type "EXPAND -r *.??_"

3	If you are updating an existing copy of WFTPD Pro, then type "WFTPD -remove" to remove it from the services list.  Make sure you wait for the dialog to appear telling you if WFTPD Pro was successfully removed as a service.

4	Copy files WFTPD.EXE (the service program) and INI2REG.EXE (if you need it - the WFTPD to WFTPD Pro converter) into your target installation directory.

5	Copy files WFTPD.CPL, WFTPD.CNT and WFTPD.HLP into the Windows SYSTEM32 subdirectory.

6	From your target installation directory (where you installed WFTPD.EXE) run "WFTPD -install".  Again, wait to make certain that WFTPD Pro has been successfully installed as a service.

7	If you wish to change the settings that WFTPD Pro starts up using - the user running it, whether it starts up automatically or not, etc, you should now visit the Control Panel, and open the Services applet.  You may also start the WFTPD Pro service from this applet.


How to Create a New Server

Creating a new server is really very simple - you simply open up the WFTPD Pro applet from the Control Panel, and click the "New Server" button.  The New Server dialog that comes up has only three entry fields, for the Name, IP address and port.  The "Name" field doesn't have to bear any relation either to the name of your NT machine, or the name that corresponds to the IP address of this server.  This is solely a 'nickname' for the server, to make an association in your mind when you see that name in dialogs, list boxes and log files.  In the example we envision, where an ISP is hosting several sites for different clients, you could use the customer's name as the Name of the server.  This name will also appear in any place where the local host name should appear - for instance, in the %L Magic Cookie, or in a STAT response.

The "Address " and "Port " together make up the unique location of each server on the Internet.  Two servers may share the same port (and will often do so, at port 21 for normal FTP), or may share the same address (often used to have a 'public' FTP site at port 21, and a 'hidden' FTP site at some other, non-standard port).  You cannot, however, have two servers that share the same address and port.  This dialog doesn't prevent you from entering an address and port combination that is already in use by some other server.  This behaviour is intentional, to allow you to define a pair of servers that may be "swapped out" - for example, to easily allow major changes to a server's setup, such as relaxed restrictions during off-peak hours, for instance.  Our example shows just such a pair of servers in the Main Control Panel dialog.  Please note that a server listening at address 0.0.0.0 on a port will prevent a subsequent server from starting to listen at that port.  While we try to delay the 0.0.0.0 server's startup until more specific servers have been started, it is of course possible to create a new server, or attempt to start a stopped server that will fail because of a previously started server.

The "Address" and "Port" fields have validation only on numerical values - you can enter a domain name of a machine, or the name of a TCP service, and the WFTPD Pro engine will attempt to resolve these on startup.  If such a resolution fails, it will be logged in the server's log file, and the server will shut down.  The "Name" field has no validation - you can enter pretty much anything here, but it must be unique.


How To Prepare Your Server For Use

Once you have created your server, you will have to allow people to access it.  The easiest, but least safe, way to do this is to disable all access security.  A harder way, but by far the more useful, is to leave security enabled, but add several users, and make the decision as to whether anonymous access will be allowed.

Select the server you are interested in working on - if this has just been created, it will have a little [image] sign next to it, indicating that the server isn't started.  Otherwise, it may have a [image] or [image] sign, indicating that the server is either enabled and waiting to start, or running.  A server that's waiting to start may be waiting because the service isn't running, or because there is some error in its setup (for instance, it may be listening at an invalid address or port, or at an address/port combination already used by another server).  A server with a [image] next to it tried to start, but died somewhere along the way.  The reason is recorded in that server's log (if it has one), and also can be viewed by selecting the server, and looking over to the text above the User List.

A server that is running may be configured in every way that any other server can, with the exception of the listening address and port.  Naturally, changing either value would seriously disrupt any work in progress on the server, so we require you to stop the server (or the service) before we let you change these two values.  Changing user rights will affect any actions that start after the changes are made.  Deleting a user will not disconnect any user currently logged in.

The first page you see will be the Security Configuration Page .  This is where you may disable all security (allowing anyone complete access to your entire system - not advisable), or affect the security in more subtle ways, such as deciding whether or not to accept anonymous access, or whether to allow uploads.  Take a look at the appropriate help page to get more information on what to do there.

The next tab across is the Logging Page , which lets you define what actions to log, and where to send that log.  Note that there is no log viewer for WFTPD Pro - the files are text files that you can load into any program that can open a file "read-only".  If your program opens the files for writing, or places any locks on the files, no logging can occur while the file is open in that manner.

The Messages Page is the next tab along, where you can define both what the connecting user will see when they log on or off, and what you will hear when they do so.  You can also enable a feature here whereby a file is displayed whenever the user changes directory, to provide navigation hints, for example.

Next is the place where you can define users that are allowed access to your system - the Users Page .  Here you can define not only what user names are accepted, but also the passwords associated with those names, their home directories, and their access rights to your system.

The next tab, the Network Page , is where you can define what systems are, or are not, allowed to connect to this server.

Finally, we come to the Conversions Page for defining file conversions.  An example is if a user wants to receive a zipped copy of a large text file, and you have defined the correct conversion, he will simply ask the server for the zipped file, and it will be created immediately before being sent to that user.

For most servers, you will want to do very little other than to add users and perhaps enable anonymous access.  It's worth making the acquaintance of the other pages, though, so that you are fully aware of WFTPD Pro's capabilities.


Converting from WFTPD

Supplied with WFTPD Pro is a small program, INI2REG.EXE, which produces a dialog like the following:

The first thing to do is to track down your INI file where you stored the WFTPD server's information - this is, by default, WFTPD.INI, and is stored in your Windows installation directory.  However, if this server used the "i" option, then the argument following that option would be the location and name of the INI file used.  The "Browse" button is probably the best way to find this file.

Underneath that, you will find a copy of the fields in the New Server dialog , for the name of the server, and the IP address and port to listen at.  Once you have entered and checked these values, click the "OK - Convert" button, and your file will be converted as INI2REG shuts down.

INI2REG is a very short, simple program, with little validation or error checking.  It does its job very quickly, and should generally need to be used only once.  Once you hit “OK - Convert", the dialog will disappear, and you may not think that anything has happened.


Choosing an IP Address and Port

We are often asked "What address and port values should I enter?"  The simple answer here is that you really should already know what IP address and port to use on your system for each server - however, a short explanation may be necessary here.

An IP Address is essentially your computer’s location on the network, just as your phone number is your address on the telephone network.  For two computers to talk through FTP, an IP-based protocol, they must each be able to reach the other’s IP address.

The IP address you enter into WFTPD Pro must be one that is mapped to your computer, usually for a network card, or a Dial-Up Adapter.  If it is not, then your server will stop with an error that the requested address is not available.  There is a "special" value for the IP address of 0.0.0.0, which has the meaning of "all IP addresses" - a server on address 0.0.0.0 and port 21 will receive all incoming FTP connections that are not accepted by other previously running servers that listen at a more specific IP address.  An IP address can be used twice, but not with the same port as its previous use.

The default port of "ftp" should match to the number "21" in your services database.  This is the standard port for operating an FTP connection on - you should not choose a different number unless you are certain of why you are doing this, since many FTP clients will not easily be able to connect to you.


Keeping Your Servers Separated

If you are providing FTP service to several different companies, it may be extremely important to keep each server separated from each other server.  This can be accomplished in the main by assigning each server a different sub-directory of your system, and restricting those servers to their subdirectories.  WFTPD Pro helps you here, with an option called "Restrict to path " - for each server, this setting can contain a directory path that the server is not allowed to escape from.  This setting is in the Security Configuration page of the Server Configuration sheet .

As with all other fields where you may enter a directory or path, we have included a "Browse" button.  We thoroughly recommend that you make use of it to ensure that people are not locked out of a server (or given access to the wrong server) because somebody misytped a directory path.

Once a server has been restricted to a path, since there are no other drives it may access, it will simply strip that path out of its displays, and treat its home as the root directory for all listings and path names supplied to, or accepted from, its users.  This makes the server look even more like a standard UNIX server, and reinforces the illusion that the server belongs only to that one customer, and is not really running on a machine that's shared with several other companies.

A word on remote administration.

Already, each server has its own list of users, with their own rights - to make things easier on the administrator, the users' home directories are still listed as a full path.  Now that remote administration is allowed through the FTP protocol, however, any remote administrator given privilege on one server will not be able to see other servers, and so he/she will see all directories and paths as being relative to the path that the server is restricted to.  As a further restriction on remote administration through FTP, a remote administrator will not be able to change the path that the server is restricted to, nor will they be allowed to assign other users as remote administrators.  Each of those operations must be carried out through running the WFTPD Pro Control Panel Applet, connected to the system running that server.

Remote administration through the Control Panel Applet, on the other hand, gives you just as much control as if you were sitting at the machine running WFTPD Pro itself.  Be very careful to whom you give such power.


Registry Contents for WFTPD Pro

This is a simple run-down of all the entries that WFTPD Pro may place in your registry.  Everything resides under the tree "HKEY_LOCAL_MACHINE\Software\Texas Imperial Software\WFTPDPro" - currently, there are few global settings, so under this tree you will find a further key "Servers", under which there is one key for each server - using the name of the server itself.  Under here, you'll find the following structure:

Address	"0.0.0.0"	IP address that this server listens at - can be either a numerical address (in string form), or a domain name
Port	"ftp"	Port that this server listens at - once again, either numeric (in number form), or the name of the service in your services database.
WindowSize	4096	Sets the TCP Window Size, and may set the large window scale option on stacks that allow it.  Currently, this means Windows 2000 and Windows 98.
Enabled	0	Is the server ready to run when the WFTPD Pro Service is? 1 means it's ready, 0 means it won't start.
Fatal Error	""	A string value noting the last fatal error that happened to this server (if any)
Started	1	If the server is enabled, this entry will tell if it has been successfully started - a value of 0 means a fatal error occurred.  This value is meaningless when "Enabled" [above] is 0
FileBufferSize	4096	The amount read from disk in each read, or the amount written to disk in each write.  Where a fast drive is available, this may improve performance.
ExternalDLL	""	The full path to an external DLL to be called for user-defined extensions to WFTPD Pro.  See the file "extrnls.h" for details on what functions may be provided by the user.
MLST	0	Set this to 1 if you want to enable the experimental support for the new MLST / MLSD commands.  At the time of writing, specification of these commands is still in the draft stage, and the final RFC may differ from the draft specifications used to program this version of the software.
Users\
<User Name>\		(Different for each user - replace "<User Name>" with the user's name
Home	""	Path to the user's home directory - if blank, the user can't log in.
Passwd	""	Encrypted password - if blank, the user can't log in.
Restricted	0	0 means user can roam freely above their home directory, 1 means they are restricted to their home and below.
Rights\
<Path>	(Inh.)	See "Rights" below
*	(Inh.)	See "Rights" below
DefaultRights\
<Path>	(Inh.)	See "Rights" below
*	(Inh.)	See "Rights" below
Hosts\
AllowAll	1	1 means allow all connections by default, 0 means deny all.
WaitForName	0	0 means don't wait for the DNS to return a name for the connecting client - 1 means to wait, and only allow the user in if the client's name exists (and matches the appropriate wild cards below)
DenyThese\
<Wildcard>	N/A	See "Hosts" below
AllowThese\
<Wildcard>	N/A	See "Hosts" below
Logging\
ConnectNum	1	The number for the next connection - used in the log file.  Increases by one each time someone logs in, clocks back to 1 after 9999.
Enable	0	1 means to enable logging, 0 means disable it.
Puts	0	1 means to log all uploads to the server, 0 means don't.
Gets	0	1 means to log all downloads to the server, 0 means don't.
Anonymous	0	1 means to log all logins/outs by anonymous users, 0 means don't
Commands	0	1 means to log every command (passwords are logged as XXXX) - 0 means don't
Logins	0	1 means to log every login and logout - 0 means don't.
Warnings	0	1 means to log all warnings - we recommend you enable this. 0 means don't.
Winsock	0	1 means to log the results of all Winsock calls - we recommend you leave it at 0, to not log these, unless you're working on tracking down a problem.
LogFile	""	This should usually contain the full path to the log file.  Obviously, if the path is empty, or if the file cannot be created/opened/written to, then logging will not occur.
Messages\
MESSAGE.FTP	0	If 1, then whenever the current directory is changed, and the new directory has a MESSAGE.FTP file in it, the file will be displayed to the connected user.
Greet	""	The greeting message - sent before the user logs in.  <CR><LF> pairs are required for ends of line.
Bye	""	The farewell message - sent when the user logs out.  <CR><LF> pairs are required for ends of line.
HelloSound	""	The full path to the WAV file played at the host machine when a user logs in.  Leave it blank for the default, which resides in the resources of the WFTPD Pro executable.  (A sample from "Hello City" by "The Bare-Naked Ladies" - check out the CD "Gordon")
PlayHelloSound	0	1 means to play the HelloSound when a user logs in.  0 means don't.  (The sound won't play if it isn't accessible)
GoodbyeSound	""	The full path to the WAV file played at the host machine when a user logs out.  Leave it blank for the default, which resides in the resources of the WFTPD Pro executable.
PlayGoodbyeSound	0	1 means to play the GoodbyeSound when a user logs out.  0 means don't.  (The sound won't play if it isn't accessible)
Security\
Secure	1	1 means to enable security features - 0 means disable them - this would mean that any connection is allowed from any source, using any user name and password (or no user name / password), and with full access to every file and directory on your system.
Allow_Anon	0	1 means to allow anonymous access to your system.  0 means don't.
MaxUsers	0	0 means 'no limit' on the maximum number of users that can be logged in to this server at any one time (the limit is actually placed by your TCP/IP stack, which can only keep a certain number of connections open).  Otherwise, this is the largest number of users that can be simultaneously logged in.
Allow_Puts	1	1 means to allow users to upload where they have rights, 0 means that uploads are not allowed from any source to this server (a 'read-only' server)
Allow_Anon_Puts	0	1 means to allow anonymous users to upload, if they have rights, and if uploads are allowed in general.  0 means that anonymous users can never upload to this server.
TimeOut	300	Time-out, in seconds, for "idle" connections.  0 means "no time-out" - we recommend putting a value other than 0 in here.
RequireBackPort	0	1 means to require that the arguments to a PORT command should indicate that the transfer or directory listing shall be sent to the same IP address that was used for establishing the control connection.  If you disable this, you immediately disable 'proxy' transfer - i.e. transfer between WFTPD Pro and any other FTP server.  0 is the default, and allows proxy transfers - this may also enable your server to be used as a jump point for hacking into other machines.  The next setting mitigates this to a large degree.
DisableLowPorts	1	1 means not to ever connect to a 'reserved' port, i.e. one lower than 1024.  This way, your system cannot be used (for example) to establish a 'bounce attack' to send fake mail by connecting to an SMTP server that trusts your system.  0 means to allow connections to reserved ports on other systems - we recommend leaving this set at 1.
RestrictToDirectory	""	This setting contains the full path to which the server is restricted.  Needless to say, if this path doesn't exist, nobody will be able to log in.
Key:

N/A - Not applicable - there is no default for this setting, WFTPD Pro triggers on the presence or absence of the key name itself.
(Inh.) - Inherited - See "Rights" below.
<Path> - the full path to a directory - using "\" (backslash) as the directory separator, and ending in a "\" (backslash).  (All paths follow this syntax)
<Wildcard> - A string specifying a network or host that is specifically allowed/denied access to this computer - see "Hosts" below.

Rights

Entries in the rights database will eventually be spirited out of the registry database and into a separate file.  Until then, the entries are stored in text in the registry. All paths are converted to long path names prior to finding their rights entries in the database - this prevents the awkward situation of having set up rights using long path names, and then having a hacker guess the short path names and shortcut the security measures on your files.  Rights are inherited according to a set scheme - when we wish to determine the rights to a directory, we try to find an entry for that directory in the user's "Rights" sub-tree.  If we can't find this, then we try again with the next directory up, and carry on going until we are left with the root directory on the drive.  If there is no entry for the root of the drive under this user, then we check the rights assigned to the entry "*" (asterisk) - thus, the asterisk is effectively a "super-root" 'above' all the drives on your system.

If there is no such entry, then we start back at the specific directory, but instead of looking at the user's rights, we look at the "DefaultRights" sub-tree - rights assigned to the "default" user.  As we did with the user's rights entries, we look for rights assigned to the directory, or to its parents in turn, and if we do not find an entry, we finally look for a "*" entry.

In the event that we don't find any rights entries, we give up and give the user full access rights to that directory (minus upload privileges if appropriate).  When we do find a rights entry, it is interpreted as a string that can contain one or more of the characters "R", "L", "O", or "C", for Read, List, Overwrite and Create.  For backward compatibility, the character "W" is interpreted as "OC".

Hosts

When deciding whether to allow or deny an incoming connection, WFTPD Pro first looks at the Hosts\AllowAll setting - if it is 1, then we search through the "DenyThese\" sub-tree, if it is 0, we search the "AllowThese\" sub-tree, looking for exceptions to the default rule.  These exceptions are denoted solely by their presence, and it doesn't matter what the value associated to each exception is set to.

The format is very simple - whatever you enter is matched against the incoming IP address and client host name (if you elect to let the server wait until the host name is resolved).  Any "*" is a wildcard, and matches any number of characters (including zero characters) - for instance, "*microsoft.com" would match any address under the "microsoft.com" domain, including "microsoft.com" itself.

Global Settings

As mentioned above, there are few global settings to report.  The only one of any note at present is "DeviceNames":

DeviceNames	"CON,AUX,PRN,LPT1,LPT2,LPT3,LPT4,LPT5,LPT6,LPT7,LPT8,LPT9,COM1,COM2,COM3,COM4,COM5,COM6,COM7,COM8,COM9,CLOCK$,CONFIG$,XMSXXXX0,$MMXXXX0,MSCD000,DBLBUFF$,IFS$HLP$"	Comma-separated (no spaces, please) list of device names - WFTPD will not allow access to any file or directory whose name exactly matches one of these elements, or one of these elements with a ':' after it.  Note that while "CON" and "CON:" are invalid, "CONFIG", "RECONNAISANCE" or "MACON" are allowed.  This list, and any comparisons to it, are case-insensitive (so "con" and "cOn" are equally invalid). To build your own string, you can run the DOS command 'MEM /D | FIND "Device"'


INI File Contents for WFTPD

Note - this page documents the INI file for a WFTPD setup.  WFTPD Pro does NOT use the WFTPD.INI file, although we do supply a tool, INI2REG.EXE, which will convert from a WFTPD.INI file to a Registry entry suitable for WFTPD Pro.

Section "General":

Key name	Default Value	Comments
ScreenPosX	<default window position>	X position of the top left of WFTPD's window
ScreenPosY	<default window position>	Y position
ScreenWidth	<default window width>	Width of WFTPD's window
ScreenHeight	<default window height>	Height
DeviceNames	"CON,AUX,PRN,LPT1,LPT2,LPT3,LPT4,LPT5,LPT6,LPT7,LPT8,LPT9,COM1,COM2,COM3,COM4,COM5,COM6,COM7,COM8,COM9,CLOCK$,CONFIG$,XMSXXXX0,$MMXXXX0,MSCD000,DBLBUFF$,IFS$HLP$"	Comma-separated (no spaces, please) list of device names - WFTPD will not allow access to any file or directory whose name exactly matches one of these elements, or one of these elements with a ':' after it.  Note that while "CON" and "CON:" are invalid, "CONFIG", "RECONNAISANCE" or "MACON" are allowed.  This list, and any comparisons to it, are case-insensitive (so "con" and "cOn" are equally invalid). To build your own string, you can run the DOS command 'MEM /D | FIND "Device"'

Section "Homes":

Key name	Default Value	Comments
<user's name>	""	Contains the home directory for this user.

Section "Hosts":

Key name	Default Value	Comments
default	0	0 means allow, 1 means deny
WaitForName	0	1 means wait for DNS to return the name of the incoming client, 0 means don't wait.  If 1, hosts without names are refused.
<host / net IP address>	<value set for "default">	same as above

Section "Logging":

Key name	Default Value	Comments
ConnectNum	1	The next connection's number
Logging	0	Enable (1)/disable (0) logging
Puts	0	Log all uploads to this site
Gets	0	Log all downloads
Anonymous	0	Log anonymous login/out
Commands	0	Log all commands
Logins	0	Log all logins
Warnings	1	Log all warnings/errors
Winsock	0	Log all Winsock calls and results - do not enable this - it is for debug only.
Logfile	""	The path and filename (including extension) for the file where logging occurs.

Section "Messages":

Key name	Default Value	Comments
MESSAGE.FTP	0	If 1, any login or CWD command will display the MESSAGE.FTP file in the new directory, if it exists.
Greet<n>	""	The nth line of the greeting message - each line must be quoted with ~ characters.  N is a 2-digit number, starting at 00.
Bye<n>	""	Nth line of the farewell message - same as for greeting message.
HelloSound	""	Full path to the WAV file played when a user logs in.  If empty, the default sound is played from WFTPD's resources.
PlayHelloSound	0	1 to play the HelloSound on each login, 0 to stay silent.
GoodbyeSound	""	Same as for HelloSound
PlayGoodbyeSound	0	Same as for PlayHelloSound

Section "Passwd":

Key name	Default Value	Comments
<user's name>	""	Encrypted password - Unix standard crypt function is used.  For obvious reasons, I can't give out source code to this function, but I can point out that a version is available in the source code to the security tool "crack", which can be found in back issues of the comp.sources.unix Newsgroup

Section "Restricted":

Key name	Default Value	Comments
<user's name>	0 for regular users, 1 for anonymous	1 means the user is restricted to their home directory and below.  0 means the user is restricted only by their rights.

Section "Rights.<user's name>":

Key name	Default Value	Comments
<directory name, ending in '\'>	<inherited rights from parent, then from section Rights.*>	Values can be any combination of R, O, L, and C - Read, Overwrite, List and Create.   The absence of a letter signifies the absence of that right on the specified directory. For backward compatibility, the single letter 'W' is treated as O and C.

Section "Rights.*":

Key name	Default Value	Comments
*	RWL	See above - default rights are to provide all access to all directories.
<directory name, ending in "\">	< inherited rights from parent, then from key *>	See above.

Section "Secure":

Key name	Default Value	Comments
Secure	1	1 means ask for passwords, and check user rights.  0 means any user can log in with or without any password, and can have access to your entire drive.  We recommend you keep this setting at 1.
Allow_Anon	0	1 means to allow anonymous users.
MaxUsers	0	0 means no maximum number of users.  Any other number means you can't have more users logged in than this setting.
Allow_Puts	1	1 means uploading (or directory creation or deletion) is allowed to directories where users have O or C rights, 0 means it is not.
Allow_Anon_Puts	0	1 means anonymous users can upload if they have sufficient rights.  0 means Anonymous users can only download.
TimeOut	0	Time-out value in seconds, or zero for no time-out.  We recommend setting this value to about 600 (10 minutes)
Disable_Unsecure_Ports	0	0 means all PORT commands are accepted, allowing proxy ftp transfers to go ahead.  1 disables proxy ftp (transferring between two ftp servers), meaning that your server can't be used to attack other sites that trust your host.
Section "Server":

Key name	Default Value	Comments
Fatal Error	“”	Describes what caused the last failure of the server
FileBufferSize	4096	Size of the buffer used to read from or write to files on disk; each read or write will try to be this size, except at the very last read or write in the file.
WindowSize	4096	The TCP/IP buffer size.  If set to large values, this may trigger the large window scale option in establishing data and command connections.
ExternalDLL	“”	Full path to an external DLL supplied by the user, to which WFTPD makes calls on certain documented occasions.
MLST	0	Set to 1 to enable support of the experimental MLST / MLSD commands.


Warning Message

This section contains a description of all of the Warning ("!") errors you might find listed in a log file, and what actions you might take to deal with them.

WFTPD - Warning (getservbyname("ftp","tcp"))
Denotes that the port entry you chose was a non-numeric value, but could not be found in your system's services database.  WFTPD Pro defaults to port 21.  Stop the server, then go to the Network Page and change the port - either choose a numeric value, or a textual value that is in your system's services database (usually in a file called "services" - check your TCP/IP documentation for details).  Now restart your server and check that the new port is accepted.

WFTPD - Fatal (socket(PF_INET,SOCK_STREAM,0))
While trying to create the listening socket, a Winsock error was triggered, denying us the capability to start the server.  The solution depends on the individual Winsock error.  Fatal - the server will not run until the underlying problem is fixed, and the server restarted.  This can happen if TCP/IP is not correctly or completely installed.

WFTPD - Fatal (bind to ftp).
We were not allowed to bind this server's IP address and port combination - once again, the solution depends on the Winsock error listed on the following line.  Fatal - the server will not run until the underlying problem is fixed, and the server restarted.

Unidentified command xxxx.
Indicates that one of your clients tried a command that is not supported by WFTPD Pro.  If a command appears fairly often, then perhaps you should ask me to support it.

Couldn't accept incoming connection
Either too many users are already connected, or the host at the other end is not allowed to connect.

Format string "xxxx" too long!
You shouldn't ever see this, but if you do, please contact me with the exact text of the message.  It indicates that a message that should have gone into the log file was longer than internal buffers, and could not be converted properly.

Client attempted transfer to different IP address, with command PORT a,b,c,d,e,f
Indicates that you have enabled the Advanced Security settings on the Security Configuration Page to disable proxy transfers, but that a client tried to carry out a proxy transfer anyway.

Bad FTP Client! Trying to STORe/RETRieve without a PORT command first is against RFC1123!
A client tried to start a file transfer or file listing without first sending a PORT or PASV command, as required by RFC 1123 (RFCs are defining documents of the Internet).  Some UNIX FTP clients can be configured to send PORT commands or not by use of a 'sendport' variable.  Consult the client's documentation to determine how best to change this behaviour.  (Yes, I'm claiming this as a client BUG, not a problem with WFTPD or WFTPD Pro)

User xxxx not logged in - could not change to home directory
Either the user's home directory does not exist, or it is unavailable to the server, or it is not a subdirectory of the directory that the server is restricted to.  Check the server's path restriction (if it has one) in the Security Configuration Page , then go to the User Page and make sure that the user's home directory is a subdirectory of the restricted path.  To make sure the directory exists, simply press the "Browse" button to bring up a directory picker.

No rights to list path "xxxx"
The user tried to list a directory to which he had no rights.  The directory listing was not sent, but the warning is logged in case you are worried about security break-in attempts.

Path/wildcard "xxxx" does not exist
The user tried to list a directory which does not exist - again, this warning may be an indication of someone trying to break into your system.  Look for patterns that develop.

Socket error NN while sending data
This indicates a Winsock error that occurred while a transfer was trying to send data to the client.  See the Winsock error list for a full description of the problem and possible solutions.

Alun has confused himself!
You shouldn't ever see this error - if you do, and especially if you can repeat it, please give me details of the conditions under which it can be reproduced.  Errors like this are sprinkled through the program, and are a redundant protection, in that they handle conditions that I am pretty sure cannot happen.

No sockets left to open PASV connection
Indicates that other users have used up all the available sockets, and the transfer attempted by the user has been refused.

Timeout while transferring data
Indicates a connection was transferring data, when it stayed idle for longer than the idle time-out specified in the Security Configuration Page and was disconnected.  Either increase the idle time-out, or get your clients to improve their connection quality.  Often, this will be caused by phone lines being dropped, or network cables becoming disconnected.  This condition may be responsible for locked files in rare cases - it may be worth restarting the server, not to mention checking your own connectivity, if you get a lot of these warnings.

Disconnect while transferring data
You disconnected a user while they were transferring data.  They may get mad at you - we cannot be held responsible if they taunt you mercilessly.

Disconnected user xxxx
You disconnected a user.  See above.

Your IP address is on the TEST_NET - WFTPD may be unreliable.
WFTPD Pro detected that it was running at an IP address starting with 192.0.2, which is a class C network reserved for test purposes.  This may be your intent.  If it is not, be aware that you may run into bizarre effects caused by software and equipment deciding that it shouldn't respond to or connect to WFTPD Pro.


Winsock Error Codes

This section contains a description of the Winsock error codes you might run into, their meanings, and suggested cures.

Please note, even if the table says that an error indicates a programming error, or states that an error should not occur in WFTPD Pro, this might not mean that WFTPD Pro is at fault.  WFTPD Pro is only reporting errors passed to it by the TCP/IP layer, which itself may have bugs.  If that is the case, I will try to give you enough information to prove to the TCP/IP supplier that there is a problem, and I will be pleased to talk with them to track down the problem.

Of course, such an error could occur because we screwed up :-)

Errors are listed in numerical order.  Some numbers do not exist, others have been removed because they are so unlikely to come up.

If you are suggested to "check your installation" of TCP/IP, one good way to do that is to remove and re-install it from scratch.  Make sure that you only have one winsock.dll file, one wsock32.dll file, and (if on NT 4.0 or Win95 with Winsock 2 installed), one WS2_32.DLL file

Error Name (From Winsock specification documents)	Number	Meaning & suggested remedy
WSAEINTR	10004	Should not occur in WFTPD Pro - it means a blocking socket call was canceled.  Please notify me if you find this error code.
WSAEFAULT	10014	Programming error - notify me if you see this error code.
WSAEINVAL	10022	Invalid argument - often a programming error, but in certain cases (especially calls to setsockopt), this indicates that I requested a capability that the underlying socket stack does not support.  If this does not specifically cause (or occur in the context of) an error, it is not worth worrying about - certain occurrences of WSAEINVAL are expected, and handled appropriately.
WSAEMFILE	10024	The network system has run out of socket handles.  Ask your TCP/IP supplier (or check their documentation) for details on increasing the number of socket handles, or reduce the maximum number of users on the server.
WSAEWOULDBLOCK	10035	Not really an error, but occasionally listed (especially if you choose to log Winsock calls) - this means that the network is slower than WFTPD Pro, so WFTPD Pro will be notified when the network is ready for the requested action.
WSAEINPROGRESS	10036	This error is returned if any Windows Sockets API function is called while a blocking function is in progress.  It shouldn't occur in WFTPD Pro, which uses very few blocking functions in its normal life.
WSAEALREADY	10037	Again, an error that occurs only on blocking sockets, which should not appear in WFTPD Pro.
WSAENOTSOCK	10038	An operation was tried on something that was not a socket.  This may occasionally appear due to one of my programming habits - that of being doubly cautious - if I receive notification of activity on a socket that I believe is already closed, I may second-guess myself and try to re-close the socket.  This is the result if the socket really is already closed.
WSAEDESTADDRREQ	10039	Shouldn't appear, as it means that a connection was attempted to 0.0.0.0, an illegal address.  Could be the result of a bad PORT command by a client.
WSAEMSGSIZE	10040	Message too long - this error should only occur on datagram sockets, which WFTPD Pro does not use.  This is almost certainly an error in the TCP/IP stack.
WSAEPROTOTYPE	10041	Indicates that WFTPD Pro requested an unavailable protocol type.  Caused by programming error.
WSAENOPROTOOPT	10042	setsockopt or getsockopt were called to set or get socket options that don't exist in this implementation.  WFTPD Pro will work around such responses.  In some cases, WSAEINVAL is incorrectly returned for these situations.
WSAEPROTONOSUPPORT	10043	Protocol not supported on this system - this usually means that there is something missing from your installation.  Check that TCP/IP is fully installed on your system, and that you have installed the appropriate Winsock stack - commonly this is the result of installing Trumpet Winsock, or some other 16-bit Winsock stack on a 32-bit system, leaving the 32-bit Winsock stack dangling.
WSAESOCKTNOSUPPORT	10044	Socket type not supported - programming error, usually, or see WSAEPROTONOSUPPORT.
WSAEOPNOTSUPP	10045	Programming error - operation not supported on this socket.
WSAEPFNOSUPPORT	10046	Protocol family not supported - usually because TCP/IP isn't correctly or fully installed - see WSAEPROTONOSUPPORT.
WSAEAFNOSUPPORT	10047	Address family not supported - usually because TCP/IP isn't correctly or fully installed - see WSAEPROTONOSUPPORT.
WSAEADDRINUSE	10048	Address already in use - indicates you already have a program listening on the specified address and port.  This may mean that you have enabled two servers on the same address and port combination, or that there is another program interfering (have you disabled Internet Information Server's FTP service, for instance?)
WSAEADDRNOTAVAIL	10049	Address not available - you have tried to enable a server running on an address that you do not have configured as part of your local system.  You can't listen on other machine's addresses!
WSAENETDOWN	10050	This error may be reported at any time if the Windows Sockets implementation detects an underlying failure.
WSAENETUNREACH	10051	Tried to connect to a remote site, usually through a PORT command, but couldn't get there.  Often because the remote machine is not connected.
WSAENETRESET	10052	The host you were connected to has crashed and rebooted.
WSAECONNABORTED	10053	The local side of the connection decided to abort the connection attempt - if data retransmission fails, for instance, or if there is no space on the socket's queue.  May be due to unnecessary slow-down on the physical connections between the two hosts, or if the remote machine is not working properly.
WSAECONNRESET	10054	Connection reset by peer - the machine you tried to connect to, or were connected to, forcibly closed the connection - since this is caused by the remote host, there's nothing you can figure out on this end as to what caused it.  NOT caused by the remote machine crashing.
WSAENOBUFS	10055	No internal buffer space available - are you running too many programs on your system?
WSAEISCONN	10056	Socket is already connected.  Programming error - if the socket is already connected, we shouldn't try to reconnect it.
WSAENOTCONN	10057	Socket not connected - we tried to send/receive on a socket that hasn't been connected to a remote host.  Programming error - the error that disconnected us should already have been noticed.
WSAESHUTDOWN	10058	Programming error - cannot send after the socket has been shut down (i.e. told not to send anything more)
WSAETIMEDOUT	10060	Connection timed out - did the remote machine die, or is it at the end of a slow link?  Either of these are likely causes of this error.
WSAECONNREFUSED	10061	Connection refused by the remote host - there may be a firewall in the way, or the FTP client may have crashed after sending a PORT command.
WSAEHOSTUNREACH	10065	No route to host - see WSAENETUNREACH.  Winsock standard specifies that this error should not occur, but you might still see it.  The Winsock stack should return WSAENETUNREACH.
WSASYSNOTREADY	10091	Returned by WSAStartup() indicating that the network subsystem is unusable.
WSAVERNOTSUPPORTED	10092	Returned by WSAStartup() indicating that the Windows Sockets DLL cannot support this app.
WSANOTINITIALISED	10093	Returned by any function except WSAStartup() indicating that a successful WSAStartup() has not yet been performed.  Programmer error.
WSAHOST_NOT_FOUND	11001	A network name could not be resolved to an IP address.  Check the spelling of the name, and also your DNS system.
WSATRY_AGAIN	11002	Non-authoritative host not found - couldn't resolve a name to an IP address, because none of the hosts that have details on the requested name could be connected to by DNS.  Try again later - they may be up again!
WSANO_RECOVERY	11003	Non recoverable error in DNS or services database.  Check your installation.
WSANO_DATA	11004	Valid name, no data - can be triggered by trying to use a name for the port assigned to the server, and choosing a name that doesn't exist in the services database.


Contact Information

The preferred route for all communications, either for support or sales, or any other issue, is by email to alun@texis.com.  This is good for both parties - it keeps a record of all communications, and I'm not as likely to ask you to start from the beginning and describe the problem again.  Also, you can send me email while you're awake, and I can respond to it when I'm awake, if we're in different parts of the world, or you keep a different schedule to mine.

We also take phone calls during regular business hours (8AM - 5PM, Central Time, USA).  Our phone and fax number is +1 (512) 378 3246.  Or, you can send regular mail to us at:

Texas Imperial Software
1602 Harvest Moon Place
Cedar Park TX 78613-1419
USA

If these addresses change, we will notify users at our web site, http://www.wftpd.com, and at our entry in the InterNIC ‘whois’ database.  From most Unix Internet sites, you can type "whois texas imperial software", and our address information will appear.

If you would like to order more copies, either of WFTPD or WFTPD Pro, your best bet is to check out our ordering information at our web site.  Here, you will find current order forms and registration instructions.  Or, if you contact me using one of the methods above, I would be glad to send you a fresh copy of the order forms.


Upgrades and Updates

With each purchase of WFTPD Pro, you qualify for a year's free upgrades and bug fixes to both WFTPD and WFTPD Pro.  During that year (assuming you have kept us informed of your current email address), you will be kept informed of any new versions that are available, and where you can download them.  As the year draws to a close, we will send you one reminder, and if you express interest in continuing with your maintenance, you can ask us to send you an invoice for the next year's upgrades and bug fixes.  We won't send any more upgrade announcements to you until the invoice has been paid.

If you purchased WFTPD Pro using a purchase order, the invoice must be paid within 60 days for you to keep your year's maintenance - if you pay between 60 and 90 days, you will need to pay to receive further upgrade announcements.


Discount Availability

It's important to state right now that there is no discount for educational use, or for government use.  This means that we don't have to debate with organizations on the borderlines, and we don't have to spend lots of time determining a group's status.

We do, however, offer a discount for volume.  Please contact us for details of our volume discount.


Source Code Availability

Source code is available, if you are interested, but the price is set to reflect the work put into the code, and the potential for lost licence sales.  We also impose a small royalty on derived copies sold.

Please contact us for details of source code pricing.

If there are specific features that you would like to see in WFTPD or WFTPD Pro, then please contact us for our consulting rates.  There is a discount on those changes that we can incorporate into future releases of WFTPD or WFTPD Pro.  We charge on a time and materials basis, and will provide an estimate on how long a change might take to implement, and what materials it may require.


Network Drive Access

Access to networked resources, such as remote drives, is not provided by drive mappings. Since WFTPD Pro runs as a service, it works in a different context to any users logged onto your system - whether it's started by a user, or at system startup, it only has access to those drives that do not need to be mapped.  You might want to investigate the following Microsoft Knowledge Base articles:

Q115848, detailing reasons why a service should not create a drive mapping, Q121073, which mentions why the Schedule service (one of Microsoft’s own) can't access drive mappings, and Q130668, which shows problems caused by attempting to create drive mappings in the Schedule service.

WFTPD Pro accepts and is able to use the UNC (Unified Naming Convention) for access to directories and files.  For example, if remote machine "FRED" has a share named "JULIA", and we want to access the directory "ERIC" underneath that share, we can type the following at any FTP client:

cd //fred/julia/eric

You have probably seen similar notation when your machine sets up its drive mappings, and says things like "Mapping drive X to \\faroff\x$"

Note that the default setup for WFTPD Pro on Windows NT installs it as a service to run under the "LocalSystem" account.  This account usually has no rights to access any remote resources through UNCs.  You can change this by enabling null sessions, but that is not secure.  A better alternative is to use the "Services" Control Panel applet to change the user that WFTPD Pro is run under.


Multi-threading in WFTPD Pro

We are often asked if WFTPD Pro is multi-threaded, as if this is some mystical guarantee that the program will work better, or faster.  Multi-threading, while useful, is not a panacea, and will only help a situation that is appropriate for its application.  It is common for naïve FTP server authors, for instance, to decide that each user will take its own thread.  While that makes for a very simple separation of duties, it also causes the server to have problems when scaling to larger numbers of users.  It is not uncommon for such a machine to be totally unusable with double digits of users.

WFTPD / WFTPD Pro, on the other hand, uses multi-threading only for those tasks that would normally hold up its operation - namely, file and directory listings.  Hence, WFTPD and WFTPD Pro are more suited to those tasks where larger numbers of users will be logging on.  WFTPD Pro has been used, for instance, to distribute public beta copies of major applications, with no complaint of lost performance.

For a long, rambling, technical discussion on the merits of multithreading, just email me at alun@texis.com sometime.


Home Directory Not Found

When WFTPD or WFTPD Pro tells a user that his / her home directory cannot be found, we often get to field the call. This is really a very simple function of WFTPD Pro - if your user is seeing the message "Can't find user's home directory", and is not able to log in, then there are few possible causes:

The home directory truly does not exist.  You can check this with Explorer.

The home directory does not exist to the service.  The service is set up to run as a particular user - does this user have rights to access the home directory?  [Note - the Control Panel applet is not usually run by the same user that runs WFTPD Pro, and hence you will have different access in the Control Panel applet than you will in WFTPD Pro]

The home directory is not accessible to the server.  The server may be restricted to a particular path - if the user’s home directory is not under that path, then the user cannot log in.

The home directory is not accessible to that user.  Maybe the user has been specifically forbidden all rights to its own home directory.

Once again, this is such a simple function that it is really unlikely that you are seeing a bug in WFTPD Pro - you are almost certainly seeing a directory that is missing, or not appropriate for the server to allow the user to log into.

We recommend opening up the Server Configuration Sheet and looking at the Security Configuration Page to remind you if the server is restricted to a particular path.  Then select the User Configuration Page to check that the directory is a sub-directory of the server's path restriction, and then use the "Browse..." button to determine that the directory still exists.

The WFTPD Pro Control Panel applet will not let you enter a directory that doesn't exist - you may leave the directory blank, but then the user will not be able to log in.


Server Configuration Sheet

The Server Configuration sheet is a set of property pages that allow you to configure all aspects of an FTP server running under WFTPD Pro.  The following pages are accessible from this sheet:

Security	Allows configuration of security aspects - how many users can log in, how long they can stay idle, and where the server is restricted.
Logging	This page is for you to decide how closely you monitor your users' actions, and what is monitored.
Messages	Defines actions taken when users log in or out - messages sent to them, and sounds played for you; also to decide whether or not to send messages every time they change directory.
Users	Create and delete users, change their passwords, and decide what areas of your system they have access to.
Network	For restricting access to this server, so that only a select group of computers can connect to it (or so that everyone but a select group can connect to it)
Conversions	Allows you to determine conversions that may be applied to files fetched from the server - for instance, to compress a file if a user requests it as a ".ZIP".


rights

"rights" is a term describing the actions that are allowed on any particular file, or in any particular directory.  For example, I may be allowed to "read" files in one place, and "create" files in another - those are rights that have been assigned to me in the User / Rights Page of the Server Configuration Sheet .


What is new in this version?

Version 2.40’s numbering suggests that it has some large changes, and that’s borne out in the code itself.  While many of these changes may not make themselves immediately clear in terms of new features visible, they also add to the list of changes.  Here is a full list of the changes made so far, in no particular order.

•	Most messages have been changed to use the numbers that clients expect from Unix servers.

•	The "Store Unique" (STOU) command now accepts a single argument - while this is, strictly speaking, against the RFC specifications, a number of clients expect this option to be supported.

•	At the end of each transfer, the number of bytes transferred is included in the Gets/Puts log information.

•	Remote site administration features are included - since these are fully documented, you can write your own customized remote administration clients.

•	LNK files (shortcuts) are now resolved, whether they point to directories or files, and without compromising WFTPD Pro’s security.  As a result, we no longer allow LNK files to be uploaded or renamed.  (Note that LNKs to UNC files will be allowed by WFTPD Pro, LNKs to mapped files will not, since WFTPD Pro, as a service, cannot access mapped drives.

•	A new, custom-written setup program has replaced the InstallShield Express script we were using.  This allows us to better cope with the unique demands of installing a service in Windows NT 4.  We hope to provide a similar setup program for Windows NT 3.51 to replace the current manual installation steps.

•	Magic cookies are supported in the greeting and farewell messages, and in the directory change notifications.  These allow you to include items such as the remote and local machine names, the time of day, etc.

•	File conversions - so that, for instance, your users can request a ZIP file to be transferred as an ARC file, and WFTPD Pro calls your external program or batch script to make the conversion prior to sending it.

•	Once again, we’ve re-written the listing command’s engine - this makes it twice as fast for recursive listings, and the sorting for recursive listings is now correct.  This change will also allow us to make more drastic changes to the speed and sorting capabilities in a future version.  Listings now run in separate threads, and do not interfere with other users’ commands.

•	We reduced the frequency of calls to the SetCurrentDirectory function, and thus prevent locking users’ directories for the entire duration of their connection - as a side result, we also cope with having a user’s current directory deleted out from under them.

•	Fixed a bug in the Users/Rights tab of the Control Panel Applet, whereby only every other rights entry was listed.

•	In the wake of some security attacks on various other Windows FTP servers, we have thoroughly reviewed any potential security hazards, and tightened WFTPD Pro up quite considerably as a result.

•	Changing directory to a removable drive now checks to see if the disk is present, and is far quicker to respond if not.

•	Delete User, and Stop Service now have added "Are you sure?" dialogs, to prevent people from accidentally carrying out these rather irreversible actions.

•	Hacker evasion - in line with IETF drafts on FTP security, we wait five to ten seconds if a user enters an incorrect user name and password combination, and after a (user configurable) number of incorrect attempts, we disconnect that user.

•	UNCs - Unified Naming Convention file names are allowed.  This means you can specify a file as \\server\share\path\file, and WFTPD Pro will be able to access that file.  Note that WFTPD Pro installs by default to run as the LocalSystem user, and as such does not have network access.  You must either choose a different user in the Service’s Startup Parameters configuration, or make the necessary changes to your networked machines to allow NULL security access.

2.41 new features list will go here.

Changes logged from version 2.40 to 2.41:

Key: N - New feature; I - Interface enhancement; B - Bug fixed; S - Security improvement; D - Design fixed

Registry entries added:

•	"<server>\Fatal Error"

•	"<server>\FileBufferSize"

•	"<server>\WindowSize"

•	"<server>\ExternalDLL"

•	"<server>\Hosts\WaitForName"

•	"<server>\MLST"

•	"DeviceNames"

WFTPD Pro Control Panel:

•	N Added ability to connect to, and configure, a remote WFTPD Pro installation.  Note, however, that you cannot currently view the remote site's list of connected users.

•	N In an effort to provide some level of support for Windows 95/98, we allow the Control Panel to configure a WFTPD Pro system running as a regular app, rather than as an NT service.  Currently missing, however, is the ability to start and stop the service from this control panel.  To request that WFTPD Pro running as a Window should refresh itself from the registry, find the window "WFTPD Service Control", and send it the registered Window message "WFTPD Service Refresh".

•	I Accelerators added for more dialog buttons; some conflicting accelerators have been disambiguated.

•	N When a server fails to start, we list it as 'dead', and when you select that server, the title of the User Frame displays the reason for the inability to start.  [Stored in registry value: "<server>\Fatal Error"]

•	I The control panel window can no longer be shrunk so small that buttons overlap or disappear.

•	D Read-only sound files can be used for login/logout notice.

•	S To allow validation of connecting hosts by name as well as IP address, we now offer the option to carry out a reverse DNS lookup.  Since this lookup takes significant time on some systems, this is not enabled by default.  [Registry value: "<server>\Hosts\WaitForName"]

•	S We no longer validate IP addresses used for filtering in the "Network" page of configuring a server; we can now filter on names as well, so pretty much anything you enter is likely to be a valid filter.  Any non-numeric filter will be ignored if you have not enabled reverse DNS lookups.

•	B Correct support (including 3-D buttons) for Windows NT 3.51 is given, along with context-sensitive help.  (Previous versions might crash in NT 3.51 with context-sensitive help)  Context-sensitive help on the main dialog box means we must remove the minimise box.

•	S If the user's home directory is on a case-sensitive file system (as reported by Windows NT to us), we do not force it into upper case.  We recommend, however, that file systems exported for an NT system to connect to should use a case-preserving, but not case-sensitive, file system.  There are many other applications that you will want to access that file system, and we cannot even remotely hope that all of them are capable of dealing with the difference between "readme" and "README" - many of your users, and their client FTP software, might have trouble making the same distinction.

•	S We now ensure that long path names are used to store, and reference, all rights entries.  If you have short pathnames in your rights database, they will be ignored when checking for rights.

•	N Version number updated.  Copyright date extended to 1999.

•	N Y2K code review carried out.

•	B  Conversions page should now correctly add new conversion names, rather than complaining that they've already been entered.

•	D  Browsing for the log file now displays "Save" instead of "Open".

•	D  Selecting servers with fatal errors now gives you the option to "Go" instead of having to "Stop" then "Go" - the server is, of course, already stopped.

•	I  The main dialog now contains the version number - note that this is the version number of the Control Panel applet, not that of the underlying FTP engine.

WFTPD Pro Setup Program:

•	N Copyright extended to 1999.

•	I If the user requests to cancel the installation, we ask them if they are truly sure of this.

•	N Files are now installed to the short-pathname of any directory entered - this allows the automated uninstall to work easily.

•	I Dialogs are expanded to accommodate

•	systems with peculiar font sizes.

WFTPD / WFTPD Pro:

•	D Files and disks of over 2GB in size are now supported in WFTPD (32-bit only) and WFTPD Pro.

•	N New commands:

•	FEAT - report on the post-RFC 959 features supported.

•	MLST - new machine-readable listing format

•	MLSD - similar to MLST

•	OPTS - for setting feature options (currently only MLST)

•	N New HOST command is recognised, but unimplemented as yet.

•	S Dynamically sized command buffer, to accept even the most outrageous of FTP denial-of-service attempts without hiccuping.

•	N Y2K code review carried out.

•	D Cookies and responses that used angle brackets ("<>") now use curly braces ("{}") instead - Netscape threw up some interesting text when given an undefined 'HTML' value.

•	D Better interaction with Nagle/Delayed Ack algorithms to improve command response time to well-behaved FTP clients.

•	S Configurable whether to wait for a reverse DNS lookup or not.  [Registry value: "<server>\Hosts\WaitForName"]  WFTPD: on menu item "Security|Host/Net".

•	S The PORT command can no longer be used to subvert restrictions to ports <1K.

•	N Preparation for version 3.0 - we now impersonate NT users and revert back to our selves when appropriate.  Currently, the only way you can take advantage of this is with the new external authenticate function or by direct access to the source.

•	* Note to IE users - WFTPD and WFTPD Pro will log an unsuccessful transfer even when IE receives the file correctly, since IE is written rather rudely with regard to FTP.

•	D We now fully support even brain-dead FTP clients that send the transfer command _before_ completing the PASV connection to transfer the data on. Note - this is a hideously bad piece of security flaw [in the client], since it means that a hacker could hijack any incoming or outgoing data transfer if he knew something about the system.  Workaround: require all data transfers to be reflexive, and beat the relevant FTP client authors over the head.

•	B When a STOR fails, we log it as a Put, rather than a Get.

•	D In case of a file error, we now log what the error code is.

•	S Avoid potential denial-of-service attack caused by sending an option string to a LIST or NLST command longer than 30 characters. "dir -1234567890123456789012345678901234567890" for instance would cause a crash.

•	S Any given short path names are always converted to long path names, to avoid somebody using short path names to evade the rights restrictions.

•	N MLST and MLSD commands added in preparation for the release of the MLST/MLSD Internet-draft as an RFC.  This is a big one, since it solves a major headache for FTP client and server authors, in that it provides a reliable machine-readable format for file listings.

•	N Double-buffering for the transferred file is slightly altered, to allow the user to specify (in the registry or INI file) how much data to read from, or write to, the disk in each go. [Registry entry "<server>\FileBufferSize"]

•	I When file transfer status is reported, we now correctly use a big 'B' to indicate 'bytes' - a little 'b' should mean 'bits'.

•	I If the message.ftp file ends in a carriage return, we no longer take that as reason to send a blank line.

•	B Removed a potential race condition and GPF in the multi-threaded listings.

•	N On any action that logs out the user, we close the impersonation handle that we received from the external authenticate function, or from future code changes for version 3.0.

•	N New capability to set the TCP/IP buffer/window size, to allow for data transfer over a link where latency or bandwidth are large; on Windows 98 and 2000, this will set the large window scale option in connection negotiation.  This may help those of you transferring files to and from orbiting spacecraft.  Seriously.  [Registry entry: "<server>\WindowSize"]

•	D New ADMN RESU (resume) command to resume after ADMN STOP has been sent.

•	D ADMN ADDU now checks to see if the user has rights before denying a new user creation; you shouldn't be trying to create the default or anonymous users.

•	D ADMN MESS MCWD is now only accepted with a further argument (Y or N).

•	D ADMN CHPW now checks to see if the user has a password (i.e. is not 'default' or 'anonymous') before changing passwords.

•	N On Win32, we try to create temporary files (for listings) in memory, and only write them to disk when memory is exhausted.

•	S We no longer validate IP address filters (e.g. 'allow/deny this host') to contain only numeric values, since we can now filter on names as well, if we are allowed to perform a reverse DNS lookup.

•	N When a WFTPD Pro server fails to start, it will note its reason in the "Fatal Error" registry key.

•	D If a data transfer times out, we don't automatically disconnect the control connection until it, too, times out.

•	D Corrected error response number for "command recognised but not implemented" to 502.

•	N Log format is changed on Win32 platforms, to use the local short date format - this avoids some user's Y2K gripes, since you can now specify that this should not use two digit dates.

•	B Owner Email Address is now saved and read correctly in WFTPD, for the %E cookie.

•	B When deleting a user from the registry, it should now delete all of that user's settings; same for deleting a server.

•	N New external DLL functionality added; currently, the only supported external function is to authenticate a user, given his name and password; the DLL's function must then return his home directory, and may return an NT user handle for impersonation purposes.  [Registry entry: "<server>\ExternalDLL" contains full path to DLL to be called.] See extrnls.h for the function prototype.

•	B WFTPD Pro stops more cleanly as a service now.

•	N On NT 3.51 and 4.0, we take NTFS rights into consideration as well as those defined in WFTPD/WFTPD Pro.

•	N Unregistered version now displays a dialog when it starts to note that it is the unregistered version, and giving instructions on how to register; this dialog can be permanently dismissed by clicking on a check-box, so it's not a "Nag Screen" - it's an attempt to reduce the number of people who email me saying "How do I register this program?".

•	N Copyright stretched to 1999; version number bumped up to 2,41,0,3

•	B When editing the user name using the arrow keys in WFTPD, the rest of the User Security dialog will update correctly.

•	N WFTPD Pro, when run on a non-NT system, or run on NT with the '-s' flag, will now load as a [hidden] Window-based app, rather than a service.  Support for this mode will be expanded in future, until we have what is essentially a Windows 9x version of WFTPD Pro.

•	I A new, default, menu option is added to the WFTPD popup menu that is available when WFTPD is minimised to the system tray.  This is the "Restore" command, so that a double-click will restore the program.

•	D  Browsing for the log file now displays "Save" instead of "Open".

•	I  Upper limit checked on the size of the disk read/write buffer.

•	B  Timeout on the data connection no longer causes timeout on the control connection.

•	B  Timeout on the control connection no longer causes GPF.

•	I  All paths displayed to the user should now be the _long_ form.

•	B  MLSD returns an error when used on a non-directory, or non-existent path.

•	B  Directory listings of volumes - i.e. root directories on local drives - should now come up properly, except for the modification time, which Win32 gives as 19800101.

•	B  Fixed an error in reporting large size files/disk space, whereby a high bit in the low order double word would cause erroneous calculation.

•	S  If we are getting file access rights, and the OS won't allow us to list those rights, then we are not going to allow access to the file.

•	B  Moved a function call to the top of the destructor, where the data contents will still be valid, thereby avoiding a GPF on logout or termination.

•	B  Fixed new MLSD / MLST functionality.

•	S Removed code that listed the true (NTFS) owner and group of a file.

•	B Fixed a buffer overflow bug reported by the bugtraq mailing list.

•	B Fixed a potential (though unlikely) buffer overwrite found through code review.

•	B Fixed a minor bug in logging in to home directories entered with terminating backslashes.

•	B: Prevent user from logging in if they have no rights to their home directory.

•	B: Fixed a bug where confusion could occur if the user's home directory ends in a slash or backslash.

•	D: Log the reason _why_ a user's home directory is not accessible to them.

•	B: Fixed an apparent hang at the end of directory listings.

•	D: Fixed an incompatibility with certain Unix FTP clients that expect the 226 response to come before they will acknowledge the FIN.  This led to some FTP clients appearing to hang at the end of data transfers and/or file listings.

•	B: Due to poor behavior on the part of the GetFileSecurity call, we had been marking files and directories as inaccessible, when the truth was merely that the OS couldn't (or wouldn't) tell us what rights we had.  This usually shows up when trying to access remote shares on non-NT systems through UNCs

•	B: "Blue Panda" reported a GPF caused when issuing the RNTO command with no previous RNFR command - this has been fixed.

•	B: Blue Panda has been busy again.  GPFs on issuing a STOR, APPE or STOU after a REST marker is set past the end of the file, or when the file does not exist; and on entering the MLST / MLSD commands prior to logging in.  Also, when we try to prevent people writing to / reading from device names such as LPT1, CON, etc, we missed a whole slew of devices.  Since there is no way (that we know of) to get a listing of devices, we've allowed users to define their own device names in a new INI file entry / registry setting "General\DeviceNames"

•	S: Another Panda-ism or two - .LNK files could be downloaded, possibly revealing local directory structures - now .LNK files can neither be uploaded, nor downloaded (nor renamed, except to other link files).  The "%C" cookie (current directory) also exposes local directory structure - this has now been corrected to respond with the same information as PWD gives.

•	B: Also from Blue Panda - a long command string consisting of characters in the range 128-255 may cause a GPF.

•	B: Corrected some instances where a closed socket was not decrementing the socket count.

•	D: Restrict data entry on usernames to 29 characters, since that is how many we load in from the registry / INI file.


What is planned for future versions?

One of the major features that we are working towards including is the ability to somewhat support the Windows user database - this may be by allowing you to configure different virtual servers as running under different User Ids - thus providing more choice in security.  We may also allow you to select one or more virtual servers to accept Windows User Ids and work within the Windows security model.  This will be the main focus of the next major release of WFTPD Pro.

However, this isn’t by any means the only addition we have planned, and it may not necessarily be the first that we implement.  Other additions and alterations we are considering include:

•	Faster listings

•	Quotas

•	Database engine for rights etc

•	Windows 95/98 version

•	Secure connections through encryption


Conversions Page

The conversions page is the dialog that allows access to the most powerful new feature of WFTPD Pro - the ability to provide instant file conversions.  It looks like this:

Our example shows a conversion you might use to allow your users to transfer an ordinary file as if it were a zip file.  In other words, if a user visited your site, and saw a file "HUGEDATA.DBF", say a ten megabyte database file, that user could say "Give me HUGEDATA.DBF.ZIP" and fetch down a far smaller amount of data (DBF files are often highly compressible).  WFTPD Pro would see that there was no file called HUGEDATA.DBF.ZIP, and would start going through the conversion list.  For each conversion, it will take the file name the user requested, see if the name substitution listed in that conversion changed it into the name of a file or directory that exists.  If so, and the transfer mode and file type were correct, the conversion’s command would be executed on the local file name, and the output of that command would be sent immediately to the user’s computer.

Of course, in our example, the user would then want to unzip the file that they received, to get the original HUGEDATA.DBF file.

Why not simply store the HUGEDATA.DBF as a ZIP file?  Well, that would be a good idea, but suppose the user wanted it sent as a ZOO file, or a GZipped file, or an ARC file, or….  Instead of having one file for each format, you could have one file and several conversion rules - one for each file format you wanted to send.

As another example, suppose you run a site where several shareware programs are stored.  Most such programs are ZIP files, with a "README.TXT" file inside.  You could invent a rule where the client could see that file xxx.zip exists, and ask to fetch file xxx.txt, which would extract and send the file to the user.  Such a rule might be entered like this:


Remote Administration Commands

The following commands are all sent through a regular FTP control connection and used by any user that has been defined as a Remote Administrator.  If you are writing an FTP client yourself, send the command as "SITE ADMN etc…". If, on the other hand, you are writing a script for a command-line FTP client, you must enter the command as "QUOTE SITE ADMN etc…", or the FTP client will tell you that it doesn’t understand the "SITE" command.

The following table lists the responses that are useful to note, in addition to the general error code for "syntax error", 501.  Note that a correct response that is indicated with a 215 message will include status information, by indicating the command used to set the [new] state.  For instance, when querying the current security status, by SITE ADMN SECU, a response might come back "215 SITE ADMN SECU Y", to indicate that security is enabled.

The format of commands in the following table is simple - items in angle brackets <like this> are parameters - you do not include angle brackets, or the text inside, but replace them with a suitable parameter.  Items in square brackets [like this] are optional.  Items with vertical bars between them are all possible values, for instance FRED|BOB|DAVE means either FRED, or BOB, or DAVE, but not more than one.  Commands and parameters are separated from one another by spaces, and as with all FTP commands, terminated with a carriage return and line feed - the CR and LF will be inserted by your FTP client, if you are writing an FTP script.  All paths of directories and files are subject to restrictions placed on the server, and may be either absolute or relative.  As with the FTP standard, all parameters are separated by single spaces (except where noted).

ADMN USER <user> <password>	Log in as an admin user.  Generally used when a normal login cannot be - i.e. when the server has been remotely stopped (by ADMN STOP).  <user> and <password> are unencrypted strings, separated by a single space.	230 = Correctly logged in 421 = too many failed login attempts 530 = incorrect user name or password, home directory not accessible, or user is not an admin user.
ADMN DISC <socket>	Disconnect the user that owns the specified socket.  The ADMN command includes sockets in its user list.	200 = Success 425 = Failure - tried to disconnect self, or a non-existent socket.
ADMN STOP [ <stop> [ <time-out> ] ]	Stop the server.  All connections after the stop receive a "125" response, indicating the server is currently inaccessible.  An ADMN USER command can be used when the server sends that 125 response, to log in and administer the server.  Parameter <stop> indicates when the server will stop - <stop> < 0 indicates to wait for all current users to disconnect themselves, <stop> = 0 indicates to stop immediately (disconnecting everyone), and <stop> > 0 indicates to wait that many minutes before disconnecting everyone.  The <time-out> value specifies how many minutes the server is expected to be down after it stops - this is displayed in the "125" response.  Once the <time-out> value has been exceeded, the server is NOT automatically restarted.	215 = Success (message may include default values - <stop> is 0, <time-out> is -1.)
ADMN RESU	Resume after ADMN STOP	215 = Success
Security Page settings:
ADMN SECU [ Y | N ]	With ‘Y’, security is enabled, with ‘N’, it is disabled.  With no parameter, no change is made.	215 = Success
ADMN ALOW ANON | ANST | STOR [ Y | N ]	Allow: Anonymous Logins (ANON) or Anonymous Uploads (ANST) or other uploads (STOR).  Y indicates allowed, N indicates disallowed - e.g. ADMN ALOW STOR Y allows uploads etc.	215 = Success
ADMN PRXY [ Y | N ]	"Allow Proxy transfers" setting from Advanced Networking - Y allows proxy transfers, N disallows them.	215 = Success
ADMN LOPT [ Y | N ]	"Ports < 1024 allowed" setting from Advanced Networking - Y allows these ports (not recommended), N disallows them	215 = Success
ADMN MAXU [ <max count> ]	Maximum number of users allowed simultaneously on server	215 = Success
ADMN IDLE [ <time out> ]	Idle timeout in seconds	215 = Success
Log settings:
ADMN ELOG [ Y | N ]	Enable Logging	215 = Success
ADMN ELOG GETS | PUTS | COMM | WARN | USER | ANON | SOCK [ Y | N ]	Enable Logging of Gets, Puts, Commands, Warnings, Logins, Anonymous, and Winsock	215 = Success
ADMN FLOG [ <path> ]	Set the file to which logging will be sent.	215 = Success
Messages settings:
ADMN MES HELO | BBYE [ <file> ]	Contents of Greeting (HELO) message or Farewell (BBYE) message.  If the file parameter is supplied then that file is read for the message.  The message is then displayed back to the admin user as it would appear on login, with Magic Cookies expanded.	220 = Success for Greeting message 221 = Success for Farewell message
ADMN MESS MCWD [ Y | N ]	Send Message.FTP file on change of directory (CWD) command.	215 = Success
Users / Rights settings:
ADMN ADDU <user>	Create user - cannot log in, until password is set.	215 = Success
ADMN DELU <user>	Delete user - since we are in FTP now, there is no "Are you sure?" - be careful in implementing this command.	215 = Success
ADMN CHPW <user> <password>	Sets a user’s password.  Note the password is in plain text, but is NOT echoed back for security reasons.	215 = Success
ADMN SETU <user> CHRT [ Y | N ]	User is restricted to home directory and below.	215 = Success
ADMN STHM <user> [ <path> ]	Home directory of user.	215 = Success
ADMN STRT <user> <path> | * [ R ] [ L ] [ O ] [ C ]	Set user’s right in specified directory.  R is Read, L is List, O is Overwrite and C is Create.  Any combination of these letters, or none, can be given.  Leaving out the R,L,O,C means no rights - use ADMN LSRT to show a user’s rights.  Do not separate the letters with spaces - they should be combined as one parameter.	215 = Success
ADMN LSRT <user>	List that user’s rights directories, and what rights are specified for them, as a list of appropriate ADMN STRT commands.  A message of "ADMN STRT <none>" indicates no specific restrictions.  "<user>" can be "default"	215 = Success
ADMN RMRT <user> <path>	Remove a rights restriction from this user - i.e. make the specified path inherit its rights from its parents.	215 = Success
ADMN USRS	List all users allowed to login, in a list of appropriate "ADMN CHPW" commands.  A return of "ADMN CHPW <none>" would indicate that you aren’t allowed to log in to view that return, so it isn’t likely.	215 = Success
Special, non-standard command:
ADMN	"SITE ADMN" on its own switches WFTPD Pro to a non-standard method of responses, whereby a multiline 300 response lists all logged-in users and their current status, and then every time status changes, an unrequested 300 response is sent to indicate that change.  This will kill most FTP clients, and is how WFTPD Pro’s control panel applet gets its information.	300 = Success The 300 responses will be either: 300 DELE <n> - Socket <n> deleted 300 MODI <user> <n> <ip> <stat> <cmd> - User status changed - user name is <user>, <n> is the socket number, <ip> is the numerical IP address they connect from, <stat> is their last status, and <cmd> is the last command.  All items are separated by space. 300 TIME - 75% of time-out reached - send NOOP to continue.

A further SITE command, "SITE CHPW" allows a user to remotely set his/her password.  For instance, "SITE CHPW xaja" will set my password to "xaja".


Choose an item from the list.


Choose an item from the list.


Click this button to make your choice.


Click this button to make your choice.


Click this button to make your choice.


Click this button to make your choice.


Click this button to make your choice.


Click this button to make your choice.


Click this button to make your choice.


Click this button to make your choice.


Click this button to make your choice.


Click this button to display and edit the greeting message displayed to newly connected users, or to change the sound that the server plays on login.


Click this button to display and edit the farewell message displayed to disconnecting users, or to change the sound that the server plays on logout.


Check this box to allow the server to offer your own navigational hints to users - the server will then check on each change of directory to see if the new directory contains a file called "MESSAGE.FTP".  If it finds this file, then it will send it to the user along with the information as to what path the user is now in.  "Magic Cookies" will be expanded in this MESSAGE.FTP file before displaying to the user:

%T  local time (in the form Thu Nov 15 17:12:42 1990)

%F  free space in current directory (kbytes)

%C  current working directory

%E  the site owner's email address

%R  remote host name

%L  local host name

%U  username given at login time

%M  maximum allowed number of users

%N  current number of users

If you do not check this box, then files named "MESSAGE.FTP" will have no effect.


This box contains a brief description of what will happen when a user logs in - for instance, whether or not to display a greeting to the user, and whether or not to play a sound at the server to indicate a new connection.


This box contains a brief description of what will happen when a user logs out - for instance, whether or not to display a message to the user, and whether or not to play a sound at the server to indicate a disconnection.


Enter the path to a file that you wish to be the log file.  If the file does not exist, it will be created the first time a log event occurs.


Click this button to make your choice.


Check this box to enable logging of the items below.


Check this box to log all attempts to retrieve files from the server.


Check this box to log all attempts to store files on the server.


Check this box to log all commands sent to the server.  Note that, in the interests of security, all passwords are logged as "XXXX".  There is no way in WFTPD Pro to discover a user's password.


Check this box to log all warnings, for instance those occasions where a user's home directory is inaccessible, or the server is unable to start for some reason.  We highly recommend enabling this option.


Check this box to log all attempts to log in or out of your server.


Check this box to log whenever an anonymous user logs in or out of this server.


Check this box only if you are debugging WFTPD Pro with Texas Imperial Software's technical support staff.  This option creates a flood of information in the log file.


Check your desired options.


Check your desired options.


Check your desired options.


Check your desired options.


Enter your input in this field.


Click this button to make your choice.


Enter your input in this field.


Enter your input in this field.


Enter your input in this field.


Check your desired options.


Check your desired options.


Choose an item from the list.


Click this button to make your choice.


Click this button to make your choice.


Click this button to make your choice.


Check your desired options.


Check your desired options.


Enter your input in this field.


Click this button to make your choice.


Choose an item from the list.


Click this button to make your choice.


Click this button to make your choice.


Check your desired options.


Check your desired options.


Check your desired options.


Check your desired options.


Check your desired options.


Enter your input in this field.


Enter your input in this field.


Select your preferred option.


Select your preferred option.


Enter your input in this field.


Click this button to make your choice.


Click this button to make your choice.


Choose an item from the list.


Enter your input in this field.


Enter the name for the new server.


Enter the IP address that this server will listen at.  This can be either a name that is resolved by your DNS, or a numerical value, of four decimal bytes separated by dots.  Note that on many systems, "050" is different from "50" - do not use leading zeroes.  The special address "0.0.0.0" means "this machine", and any server listening at that address will get all incoming connections.


Enter the port that you want this server to listen on.  The usual entry is "ftp", or "21", for standard FTP.  You may want to choose a different port, but you will have to tell all your users the port number.


Closes this dialog and saves any changes you have made.


Closes this dialog without saving any changes you have made.


Enter the Greeting or Farewell message in this text box.  Keep it short, about ten lines is good, and try to enter less than 74 characters per line, since many systems only have 80 column displays, and there will be four characters preceding each line.  You can also use the following "magic cookies", which will be expanded on display:

%T  local time (in the form Thu Nov 15 17:12:42 1990)

%F  free space in current directory (kbytes)

%C  current working directory

%E  the site owner's email address

%R  remote host name

%L  local host name

%U  username given at login time

%M  maximum allowed number of users

%N  current number of users

(Many of these values have no meaning when the user is not logged in)


Check this box to play a sound at the server whenever a client logs in or out.


Click this button to select the WAV file that is played when a user logs in or out.  This button will display the currently selected WAV file, or will be blank if the default sound has been selected.


Tells the server to play the default sound when a user logs in or out.


Click this button to test the currently selected WAVe file.  You cannot test the default sound.


Closes this dialog and saves any changes you have made.


Closes this dialog without saving any changes you have made.


Opens help for this dialog.


Enter your input in this field.


Choose an item from the list.


Choose a directory from this list.


Choose an item from the list.


Choose a drive from this list.


Closes this dialog and saves the directory choice you have made.


Closes this dialog without saving any directory choice you may have made.


Displays Help information for this dialog.


Check your desired options.


Enter the name for this new user.


Closes this dialog and saves any changes you have made.


Closes this dialog without saving any changes you have made.


Enter your input in this field.


Enter your input in this field.


Closes this dialog and saves any changes you have made.


Closes this dialog without saving any changes you have made.


Enter a prefix to be stripped from the filename supplied by the FTP client.  e.g. to specify that a request to "get FREDFISH.DAT" should require the file "FISH.DAT" to be present on the server, you would enter "FRED" here.


Enter a suffix to be stripped from the filename supplied by the FTP client.  e.g. to specify that a request to "get FISH.DAT.ZIP" should require the file "FISH.DAT" to be present on the server, you would enter ".ZIP" here


Enter a prefix to be added to the filename supplied by the FTP client.  e.g. to specify that a request to "get FISH.DAT" should require the file "FREDFISH.DAT" to be present on the server, you would enter "FRED" here.


Enter a suffix to be added from the filename supplied by the FTP client.  e.g. to specify that a request to "get FISH.DAT" should require the file "FISH.DAT.FRY" to be present on the server, you would enter ".FRY" here.


Check your desired options - ASCII or Binary - ASCII transfer mode is usually used only for text files, Binary modes are used for files that must not be altered in their transfer.  A zip file, for instance, must be sent in Binary mode, so if your conversion creates a zip file to transmit, then you must select Binary, and not ASCII.  On the other hand, if your conversion creates a text file, then you may want to select both ASCII and Binary.


Check your desired options - ASCII or Binary - ASCII transfer mode is usually used only for text files, Binary modes are used for files that must not be altered in their transfer.  A zip file, for instance, must be sent in Binary mode, so if your conversion creates a zip file to transmit, then you must select Binary, and not ASCII.  On the other hand, if your conversion creates a text file, then you may want to select both ASCII and Binary.


Check your desired options - Files or Directories.  For instance, a call to a text compression conversion might only work on files.  A zip program, however, might be able to compress files and entire directory trees.  Be very careful when checking "Directories" - there is no security checking done on files that the conversion command will access.


Check your desired options - Files or Directories.  For instance, a call to a text compression conversion might only work on files.  A zip program, however, might be able to compress files and entire directory trees.  Be very careful when checking "Directories" - there is no security checking done on files that the conversion command will access.


Enter the command that will be used to run the conversion, and output the conversion to the standard output stream - for instance, to compress the base file using Info-Zip, the command might be "zip - %s"  The '-' tells zip to send the output of the command to the standard output stream, and the %s will be replaced with the base filename.  Note that, if you have specified a prefix or suffix to add to get the local file from the base filename, you must add those values either side of the %s.


Create a new conversion, by giving it a name.  The name itself is largely immaterial, and is only used as an aid to memory, and a string to list in the transfer log.


Click this button to delete the selected Conversion.


This list-box displays the currently created Conversion names - note that the names are not important in themselves, except as a memory aid.  These names will appear in the log of transfers to let you know which conversions are being run.


Click this button to rename the selected Conversion.


Closes this dialog and saves any changes you have made.


Closes this dialog without saving any changes you have made.


Enter your input in this field.


Choose an item from the list.


Closes this dialog and saves any changes you have made.


Closes this dialog without saving any changes you have made.


Click this button to make your choice.


Context . Greeting / Farewell . WAV file to play
WAV file to play

Click this button to select the WAV file that is played when a user logs in or out.  This button will display the currently selected WAV file, or will be blank if the default sound has been selected.


Context . Greeting / Farewell . message text
Greeting / Farewell message text

Enter the Greeting or Farewell message in this text box.  Keep it short, about ten lines is good, and try to enter less than 74 characters per line, since many systems only have 80 column displays, and there will be four characters preceding each line.  You can also use the following "magic cookies", which will be expanded on display:

%T	local time (in the form Thu Nov 15 17:12:42 1990)
%F	free space in current directory (kbytes)
%C	current working directory
%E	the site owner's email address
%R	remote host name
%L	local host name
%U	username given at login time
%M	maximum allowed number of users
%N	current number of users
(Many of these values have no meaning when the user is not logged in)


Context . Greeting / Farewell . Play sound on log[in,out]
Play sound on log{in/out}

Check this box to play a sound at the server whenever a client logs in or out.


Context . Greeting / Farewell . Default Sound
Default Sound

Pressing this button reverts the sound selection to the default sound, contained in the WFTPD Pro executable.


Context . Greeting / Farewell . Test Sound
Test Sound

Click this button to test the currently selected WAVe file.  You cannot test the default sound.


Context . Main Dialog . The Server List
The Server List

This window, the Server List, lists all the servers currently defined in your database, and their current status:

	a red "STOP" sign means the server is not enabled.
	a yellow sign with an hourglass means the server is enabled, but is not running - either the service isn't running, or the server is trying to start up.
	a green "GO" sign means the server is running and accepting input.
You can view the users logged in to a server by selecting it, at which point an administrative connection will be established to the server, and the User List (the window to the right of the server list) will display the list of connected users.  Double clicking on any server allows you to alter its configuration.


Context . Main Dialog . The User List
The User List

This window lists all the users currently connected to the currently selected server, and what they are doing.  You have an administrative connection to this server while viewing the list of users, but that is not shown - you know what you are doing.  Buttons underneath this window allow you to disconnect one or more users (or perhaps disconnect all of them at once!).


Context . Main Dialog . Stop / Go Server
"Stop" / "Go"

Starts or stops the currently selected server.  Note that while a server is running, you cannot alter its IP address or listening port - you have to stop the server before changing those values.


Context . Main Dialog . Delete Server
Delete Server

Deletes the currently selected server from your database.  Note - this cannot be undone, and will delete all users, their rights settings, and other information attached to the server.  If you do not wish to do this, you can simply stop the server, and leave it stopped for as long as you like.  Deleting the server is intended to be a permanent act.


Context . Main Dialog . Start / Stop Service
"Start Service" / "Stop Service"

This button is labeled either "Start Service" or "Stop Service", depending on the current state of the service.  Note that stopping and starting the service can take some time, and the dialog will only return to your control once the action has finished.


Context . Main Dialog . Configure Server
Configure…

Configure the selected server (can also be done by double-clicking a particular server).

You can enter user names, rights, security configuration, greeting and farewell messages, etc.


Context . Main Dialog . New Server
New Server…

Creates a new server - enter an IP address, a port to listen on, and the name of the new server.  The new server starts off disabled, so that you may configure it more easily.


Context . Main Dialog . Disconnect User
Disconnect

Disconnects the selected user(s) from the server - you cannot disconnect yourself, except by selecting another server to view.


Context . Main Dialog . Disconnect All
Disconnect All

Disconnects all users currently connected into the server (except for your administrative connection, of course)


Context . Directory Picker . Drives selection list
"Drives" selection list

Click here to select a different drive to find this directory in.


Context . Directory Picker . Directories selection list
"Directories" selection list

Choose the directory from this list - you can double-click directories to view their sub-directories.  Select the desired directory and press OK.


Context . Conversions Page . Conversions list
"Conversions" list

This list shows the conversions available to this server.  To edit a particular conversion, select it here, and make the appropriate changes in the fields to the right.


Context . Conversions Page . New Conversion
"New" conversion button

Press this button to create a new conversion and add it to the list for editing.


Context . Conversions Page . Rename Conversion
"Rename" conversion button

Press the "Rename" button to rename the currently selected conversion.


Context . Conversions Page . Delete Conversion
"Delete" conversion button

Press the "Delete" button to delete the currently selected conversion.


Context . Conversions Page . Prefix to be stripped
Prefix to be stripped

Enter a prefix that should be stripped from the file requested by the user to get the base filename.  In our example, where a user that requests file C1FRED.ZIP will be given a conversion based on the local file XZFRED.TXT, the base file name is "FRED", and the prefix to be stripped is "C1".


Context . Conversions Page . Suffix to be stripped
Suffix to be stripped

Enter a suffix that should be stripped from the file requested by the user to get the base filename.  In our example, where a user that requests file C1FRED.ZIP will be given a conversion based on the local file XZFRED.TXT, the base file name is "FRED", and the suffix to be stripped is ".ZIP".


Context . Conversions Page . Prefix to be added
Prefix to be added

Enter a prefix that should be added to the base filename to find the local file.  In our example, where a user that requests file C1FRED.ZIP will be given a conversion based on the local file XZFRED.TXT, the base file name is "FRED", and the prefix to be added is "XZ".


Context . Conversions Page . Suffix to be added
Suffix to be added

Enter a suffix that should be added to the base filename to find the local file.  In our example, where a user that requests file C1FRED.ZIP will be given a conversion based on the local file XZFRED.TXT, the base file name is "FRED", and the suffix to be added is ".TXT".


Context . Conversions Page . Transfer mode - ASCII
Transfer mode - ASCII

Select which transfer modes the conversion will be allowed to work in.  The ASCII transfer mode is only suitable for text files.  If your conversion produces, say, a list of contents of an archive file, it may be appropriate to allow this conversion to occur in ASCII mode.


Context . Conversions Page . Transfer mode - Binary
Transfer mode -Binary

Select which transfer modes the conversion will be allowed to work in.  The Binary transfer mode is used when files must be transmitted exactly as they appear on disk.  If your conversion produces, say, an archive file, it should be set up to be allowed only in Binary mode.


Context . Conversions Page . Local file is a normal file
Local file is a normal file

Select whether to allow this conversion when the local file is a file, or a directory, or both.  Often a similar conversion will be required for directories as for files - for instance, requesting a file as a ZIP would speed transfer times, and requesting a directory as a ZIP would certainly help.  Since the command to generate these two zip files would be different depending on the type of the local file, you would want to create two conversions - one for zipping directories, and another for zipping files.  Remember, especially when selecting directories, that WFTPD Pro only checks for security the local file that results from stripping/adding prefixes/suffixes - if the conversion command descends subdirectories, that is not checked for security.


Context . Conversions Page . Local file is a directory
Local file is a directory

Select whether to allow this conversion when the local file is a file, or a directory, or both.  Often a similar conversion will be required for directories as for files - for instance, requesting a file as a ZIP would speed transfer times, and requesting a directory as a ZIP would certainly help.  Since the command to generate these two zip files would be different depending on the type of the local file, you would want to create two conversions - one for zipping directories, and another for zipping files.  Remember, especially when selecting directories, that WFTPD Pro only checks for security the local file that results from stripping/adding prefixes/suffixes - if the conversion command descends subdirectories, that is not checked for security.


Context . Conversions Page . Conversion Command
Conversion Command

Enter here the command to perform the conversion.  When you want the local file (not the base filename) to be substituted into the command, enter "%s".  In our example, where a user requests the file C1FRED.ZIP, and we find the base filename to be FRED, and the local file to be XZFRED.TXT, we might have a conversion command that looked like "convert -opts %s".  The command actually executed would be "convert -opts XZFRED.TXT".


Context . Security Page . Enable Security
Enable Security

We recommend leaving this check-box checked, i.e. with security enabled.  When you uncheck this box, you remove most of the security that WFTPD Pro provides - a connecting client can then enter any user name and password combination, or even no user name at all, and will be accepted on to the system.  From there, this user will have full access to your entire system.


Context . Security Page . Allow Uploads etc.
Allow Uploads etc.

Check this box if you want any of your users to be able to upload files, rename files, delete files, create or delete directories - any action that will make changes to the contents of the file store on this server.  By simply un-checking this box, you can turn your WFTPD Pro server into a "read-only" system.


Context . Security Page . Allow "Anonymous" Logins
Allow "Anonymous" Logins

Check this box if you want to enable the special user "anonymous".  The "anonymous" user can log in and provide any password.  For this reason, many servers either disable the "anonymous" user, or strictly secure that user from doing anything dangerous (such as accessing other users' files, or being able to read from the same directories that they can write to).  Clients can also use the user name "ftp" instead of "anonymous".


Context . Security Page . Allow "Anonymous" Users to Upload, etc
Allow "Anonymous" Users to Upload, etc

Check this box if you want "anonymous" users to be able to upload, rename or delete files, or create or delete directories - any action that will make changes to the contents of this server's file store.  By simply un-checking this box, you will disable any rights that would otherwise allow the "anonymous" user to do any of these acts.  Note that the "Allow Uploads, etc" check-box has priority over this check-box.


Context . Security Page . Restrict Server to Path
Restrict Server to Path

Enter the path here to which the server will be restricted - or (highly recommended) use the "Browse" button to graphically select the restriction path for this server.  Once a path is entered here, no user of the server (even remote administrators) will be able to go above that path, or to another drive or share.  UNC paths are supported in this field.

(For people with Unix backgrounds - this is similar to the 'chroot' function found on most Unix systems.)


Context . Security Page . Maximum User Count
Maximum User Count

Enter the maximum number of users that can be simultaneously connected to your site.  Note that there is no exact calculation to decide what will be the maximum user count, it depends very much on how the users of your site plan on spending their time at your site.  For instance, if you will have a lot of people logging in just to retrieve one large file, before logging out, you may be able to have less simultaneous users than a site where people will log in, and spend some time navigating directories and reading relatively small text files.

Enter a value of 0 to leave the server unlimited as to the maximum number of users allowed at any one time.


Context . Security Page . Idle Timeout
Idle Timeout

Enter here the number of seconds a user may remain inactive before the server decides that their connection must be dead, and disconnects them.  The default here is 300, or five minutes - a value of '0' means that the server will never disconnect inactive users.  If inactive users are not disconnected, they may leave locked files that can not be deleted until the server or service is stopped.  We recommend choosing a value of between 300 and 600 (five to ten minutes) - your users will let you know if this is too short, or too long.


Context . Security Page . Failed Logins Before Disconnect
Failed Logins Before Disconnect

Enter here the number of failed login attempts that will be tolerated from any one client's connection before the connection is terminated.  Note that each failed login attempt will take from five to ten seconds to complete - these measures combined will help prevent your site from being hacked by people mindlessly trying different user names and passwords.


Context . Security Page . Disable Proxy Data Connections
Advanced Network Security - Disable Proxy Data Connections

Proxy data connections are used to do what is known as a "three-way transfer".  Machine A (the client) logs into FTP servers on machine B and machine C, and tells one server to transfer a file to the other server.  Such a transfer does not go through machine A, and thus depends only on the link between machines B & C.  This can be useful, but there are very few client programs that support this, very few users that understand it, and very few servers that allow it.

A server that is set up to allow proxy data connections can be used to initiate a hacking attack known as a "bounce" attack.  A bounce attack is one where an FTP client tells the FTP server to connect, say, to a mail server instead of another FTP server, and send a file (usually containing commands) to that mail server.  This allows the hacker to 'hide' his address behind that of the FTP server.

As a compromise, to allow proxy support, but deny most bounce attacks, we suggest you leave proxy data connections enabled, but disallow connecting to low port numbers.

If you disable proxy data connections, then data transfer ports are only accepted when they quote the same IP address as that which the client is currently using to send commands.


Context . Security Page . Do Not Connect to Low (<1024) Port Numbers
Advanced Network Security - Do Not Connect to Low (<1024) Port Numbers

Port numbers below 1024 are meant to be reserved for "well-known services", such as mail, or FTP.  It would be inappropriate for such a low port number to be requested as the data transfer port, through the PORT command.  Hence, we return an error when such a low port number is requested, since it is most likely to be requested when trying to create a 'bounce' attack onto one of these well-known services.

There are, however, some FTP clients, particularly those in embedded systems and firmware, that request low port numbers - to achieve reliable communications with these clients, you may have to uncheck this box.


Context . Security Page . Browse [restrict server to path]
Browse [restrict server to path]

Clicking the browse button allows you to select, through an Explorer/File Manager style interface, just what directory you would like this server to be restricted to.


Context . Network Page . Add Address to Deny/Allow Exception List
Add Address to Deny/Allow Exception List

Clicking this button will add the displayed address (to the right) to the list of exceptions to the default Deny / Allow setting.  The list of exceptions is to the left of the Add button.


Context . Network Page . Allow All Networks / Hosts by Default
Allow All Networks / Hosts by Default

Selecting this radio button will set the default acceptance method for your server - allowing all connections by default.  When you select this button, the list underneath will display those networks or hosts that are exceptions to the default rule (i.e. are denied access to the server), and you may add or remove individual IP addresses or ranges to this exception list.


Context . Network Page . Deny All Networks / Hosts by Default
Deny All Networks / Hosts by Default

Selecting this radio button will set the default acceptance method for your server - denying all connections by default.  When you select this button, the list underneath will display those networks or hosts that are exceptions to the default rule (i.e. are granted access to the server), and you may add or remove individual IP addresses or ranges to this list of exceptions.


Context . Network Page . Address to be Excepted From Default Deny/Allow Action
Address to Be Excepted From Default Deny/Allow Action

Enter here a numeric address, or address range, of a host or network to be excluded from the default deny / allow action.  You must enter four decimal values from 0 to 255 (or a star to represent the range 0-255), separated by dots.  You will then press the "Add" button to add the entered address to the exception list.


Context . Network Page . Address Where Server Will Listen
Address Where Server Will Listen

When the server is stopped, you may alter the address where the server will listen by entering it here.  You may either enter the host name, or the numerical IP address.  The special address of "0.0.0.0" means "listen at all IP addresses".  You must specify a non-zero port name or number, also - the default port is "ftp", which should map to 21.


Context . Network Page . List of Exceptions to Default Deny / Allow Rule
List of Exceptions to Default Deny / Allow Rule

This list shows all the exceptions to the currently selected default Deny or Allow rule.  Each default selection has its own list in the registry - this allows you to define, if you like, a "lock-down" mode, where everyone is denied except those machines you know are used by the system administrators, and a "free" mode, where everyone is allowed except for those machines that have abused your system.


Context . Network Page . Port Where Server Will Listen
Port Where Server Will Listen

When the server is stopped, you can alter the port where the server will listen by entering it here.  Note that you cannot have two servers listening at the same address and port.  The port can be a name or a number - if a name, it must be in the "services" database in your TCP/IP implementation.  The default is "ftp", which should map in the "services" database to 21.


Context . Network Page . Remove Selected Exception From List
Remove Selected Exception from List

Click this button to remove the selected exception from the exceptions list.


Context . Network Page . Enter the Server Owner's Email
Enter the Server Owner's Email

Any text you enter here will be displayed in place of the Magic Cookie "%E" in greeting and farewell messages, as well as in directory change messages.  Its intended purpose is to allow you to place an email address so that users can contact you if they have any questions about this server.


Context . Log Page . Log to File
Log to File

Enter the file name into which this server should store its logging information.  We recommend using the "Browse" button to navigate to the correct directory and enter a file name.  WFTPD Pro will append to existing files.  Since WFTPD Pro stores the name of the server at the beginning of each line, there is no particular need to specify a different log file for each virtual server.


Context . Log Page . Browse [log file name]
Browse [log file name]

Use this button to open a "Save As" kind of dialog, allowing you to specify what file you will be storing the log entries in.


Context . Log Page . Enable Logging
Enable Logging

Check this box to enable logging, i.e. to require WFTPD Pro to log those items that you have marked in the frame below.  Unchecking this box, or deleting the name of the log file, will cause WFTPD Pro to stop logging.


Context . Log Page . Log Gets
Log Gets

Check this box if you want to log every time a client fetches a file from this server.


Context . Log Page . Log Puts
Log Puts

Check this box if you want to log every time a client places a file onto this server.


Context . Log Page . Log Commands
Log Commands

Check this box if you want to log each command a user types – note for security’s sake, WFTPD will not log passwords as they are entered by the client, replacing the password string with "XXXX".


Context . Log Page . Log Warnings
Log Warnings

Check this box if you want to log those warnings that might indicate a misconfiguration of your system – for instance, warnings would appear if a user’s home directory did not exist, or if an unexpected Winsock error occurred.


Context . Log Page . Log Logins
Log Logins

Check this box to require WFTPD Pro to log all login attempts.


Context . Log Page . Log Anonymous Logins
Log Anonymous Logins

Check this box to require WFTPD Pro log all anonymous login attempts.


Context . Log Page . Log Winsock Calls
Log Winsock Calls

Check this box only on advice from Texas Imperial Software – it is used solely for debugging, and generates many times more log information than most people want to see.


Context . Messages Page . Farewell Action
Farewell Action

The action to be taken when a user logs out is displayed here – whether or not a message is displayed to the user, and whether (and what) sounds will be played at the server machine.


Context . Messages Page . Configure Farewell Action
Configure Farewell Action

Press this button to be taken to the Farewell message configuration dialog, where you may alter the farewell message, and specify whether and what sounds will be played at the server machine when a user logs out.


Context . Messages Page . Greeting Action
Greeting Action

The action to be taken when a user logs in is displayed here – whether or not a message is displayed to the user, and whether (and what) sounds will be played at the server machine.


Context . Messages Page . Configure Greeting Action
Configure Greeting Action

Press this button to be taken to the Greeting message configuration dialog, where you may alter the greeting message, and specify whether and what sounds will be played at the server machine when a user logs in.


Context . Messages Page . Send Message.FTP on Directory Change
Send Message.FTP on Directory Change

Check this box if you will be preparing files called MESSAGE.FTP to be displayed when a user navigates through the directory structure.  Often, such a file will contain brief instructions as to what is contained in this directory.  When this box is checked, any such file will be displayed when a user visits the directory containing the file.


Context . Network Page . Listen at IP Address / Port
Listen at IP Address / Port

Enter the address and port that you would like this server to listen at.  The port can be a name, such as "ftp", or a number, such as "21".  If it is a name, then it must be found in the services database.  The IP address can be a name or number – if a name, then it must be resolved by DNS or the local hosts file to a numerical IP address that is owned by this machine.


Context . Main Dialog . Dialog Help
Main Dialog Help

This button will display help information on this main dialog of the WFTPD Pro Control Panel applet.


Context . Conversions Page . Conversion Name
Conversion Name

Here you can enter the name of your new conversion - it can be pretty much any name you like - the name is only used as a reference in the registry, and for you to know which conversion is being used in any particular file transaction (when you log Puts / Gets)


Glossary

A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z

A

Anonymous

The "anonymous" user is a special user name that is common to most FTP servers.  By logging in with the user name "anonymous" or "ftp", members of the public can access your FTP server, supplying anything they choose for the password.  For politeness, many users will send their e-mail address as the password - however, this practice is becoming less prevalent with the advent of spam (junk e-mail).  We highly recommend placing tight security on this account if you enable it.

B

Browse

This is a button that appears on all dialogs that allow you to specify a directory - instead of having to type in the whole directory, you may just press the Browse button, and navigate (through an Explorer-like window) to the directory you want to specify, before hitting the OK button.  The selected directory will then be entered in the appropriate edit box.  This button allows you to avoid typing mistakes, or the common fault of entering a directory that doesn't exist.

C

Control Panel

The Control Panel is a set of "applets", or small programs, that generally allow you to control and configure various programs.  The WFTPD Pro service is controlled and configured through the use of one of these applets.

Crippleware

This is a term implying software that has been "crippled" (some of its features disabled or weakened) to entice people to buy the full version.  The 'crippled' version is often distributed for free.  This is the most common method of distributing shareware, but is generally used by people that don't like the process of removing functionality to persuade people to buy.  While we can understand this resentment, we have also had many years of experience of trying to sell uncrippled shareware, and finding that no-one sent in any registrations.  Hence, all free evaluation versions of our products are slightly reduced in features from the full release version.  We believe this also gives greater value to those of our users that have sent in their monetary thanks.

D

Default

This is another special user name, like "anonymous" - however, "default" never actually gets to log in.  It is just a "place-holder" user, which holds the default rights that will be applied to those users whose rights are not defined.

E

F

File conversions

File conversions are a powerful new feature, whereby WFTPD Pro can provide, for instance, archive files in a client's requested format, without requiring persistent storage of the several formats of archive files.  When a user requests a file that is not present, WFTPD Pro proceeds through the list of conversions one by one, checking to see if adding and deleting certain prefixes and suffixes will lead to a file that does exist on the server.  It then executes the command defined in that conversion to create the new format of file to be sent to the client.  By choosing the correct suffixes and prefixes in defining these conversions, you can specify exactly what conversions are available.

Freeware

A term for software that is freely distributed - i.e. there is no charge for its use.  Often there are restrictions as to the uses that a freeware program may be put to, for instance, not to be used by government agencies, etc.  Occasionally, source code is available.  There are many useful freeware programs out there, which are often found alongside shareware programs.

FTP

Acronym for File Transfer Protocol.  A standard, defined in RFC documents 959 and 1123, that dictates standard methods that different systems might use to transfer files between one another.  This standard defines what actions an FTP "client" program must do, and what actions an FTP "server" program must do in response to those actions from the client.  While the standards documents have obviously allowed for a great amount of inter-operation, there are also several undocumented, or under-documented, functions in common use between FTP clients and servers that we have chosen to implement here.  These include, for instance, file conversions, Unix 'ls' command line options, stream-mode restart (for resuming interrupted transfers), etc.  Our chief developer, Alun Jones, is strongly involved in the FTPEXT working group, the IETF working group whose charter is to develop the FTP protocol for future uses.  As such, we will not only implement new features as they come along, but we will also be greatly involved in defining those new features.

G

H

Home Directory

In WFTPD Pro, each user has a 'home' directory.  As the name implies, this is the directory that the user will always start out from.  Every time the user logs in, he/she will be placed into his/her home directory.  If the home directory does not exist, or is unavailable to WFTPD Pro, then the user will not be able to log in.

I

Idle Timeout

Since TCP/IP does not repeatedly transmit messages of the "are you still there?" form, it is impossible at times to tell the difference between an idle client and one that has been irrevocably disconnected.  For this reason, many older FTP servers had the problem of clients logging in, beginning a transfer, and then becoming disconnected.  This left the half-transferred file locked in an open state, with the result that no-one else could then transfer or delete that file until the FTP server died or was killed.  To avoid this problem, FTP authors decided that if a client was idle for more than a certain length of time, it would be assumed "disconnected", and its activities would be terminated.  This period of time is the "Idle Timeout" - we recommend setting it to about 5-10 minutes.

IP Address / Port

A connection between two machines in TCP/IP needs to be uniquely identified.  Each machine has its own IP address, which identifies "where it is" to the rest of the TCP/IP network, but since two machines may have more than one address, a further identifying feature is required.  Hence, each connection has two "port numbers" specified, one on each machine.  Further, server programs such as FTP servers, mail servers, etc, have to 'listen' for incoming connections, and achieve this by creating a listening "socket", bound to a local IP address and port number.  The port number that an FTP server should bind to by default is 21.  An FTP client can then connect (from any port number on its machine) to the FTP server's IP address at port 21, and be assured that its connection can be uniquely identified.

J

K

L

M

Magic Cookies

WFTPD Pro borrows a little from some common Unix FTP servers here, in that it allows you to specify greeting, farewell, and navigation messages that contain variable items such as the current time, the number of users, or the name of the machine connecting to the server.  This is done by including magic cookies, such as "%T", "%N", or "%R", which will be converted before being sent to the FTP client into the appropriate text.

Mapped Drive

In DOS / Windows, local drives are each assigned drive letters.  To access remote drives, one may use either "UNC" file-names, which specify the entire path to reach a particular file, or "mapped" drive letters, where the path needs only to be specified when creating the mapping.  Once a drive letter has been mapped, that drive letter can be used again and again.  Unfortunately, since the drive letters available for mapping are globally assigned, services are not allowed to assign or use those drive letters, since they must remain available for interactive users to assign, delete, and use.  Since WFTPD Pro is a service, it is prohibited from using mapped drive letters to reference files on other machines.  However, with the release of version 2.40, WFTPD Pro does support access to remote files through UNCs.

Multi-homed site

Any given machine with TCP/IP access may have more than one Network Interface Card, or NIC, and each such card may have more than one IP address.  Such a machine can thus be reached at several different addresses, and is known as a "multi-homed" site.  Under WFTPD Pro, each IP address can be treated as a different FTP server - thus, a single machine appears to be more than one FTP site.  It is our guess that many Internet Service Providers will use WFTPD Pro to provide customized FTP sites to their customers.

N

Nagware

This is a form of shareware wherein the unregistered version repeatedly displays messages to the user, suggesting that they register.  Such messages, or "nags", are often highly intrusive, and require some action to dismiss.  We feel this is a little too intrusive, and we do not use this.  In our evaluation versions, however, we do note to incoming clients that they are connected to an unregistered evaluation version of WFTPD or WFTPD Pro.

O

P

Passive / PASV

There are two methods commonly used for transferring files with FTP - the first, more common, is known as "active open", where the server opens a connection to the client when files need to be transmitted.  The second, known as "passive open" is where the server waits for the client to open a connection.  It is advised that your clients use this second method if there is a firewall between the client and server, since this generally works when the first method does not.

Property Page

In many current Windows applications, configuration is carried out through a dialog with a series of "tabs" at the top selecting the categories of configuration to be carried out.  Selecting each tab gives a different set of check-boxes, etc.  The pages of configuration information that are brought into view when selecting a tab are known as "property pages".

Property Sheet

A property sheet is a dialog that contains several property pages, each of which is selectable by clicking on a 'tab' at the top of the property sheet.

Proxy transfer

Also known as three-way transfer, a proxy transfer is a very powerful feature of FTP that allows one client program to control two FTP servers, and request that they transfer one or more files between themselves, without passing through the FTP client.  It is unfortunate that proxy transfer can also be used to hide hackers' attacks on some Internet systems.  We set WFTPD up so that it allows proxy transfers, but protects against the most harmful attacks for which this feature may be abused.  If you require more security, you may totally disable proxy transfers.

Q

R

Registry

The registry is a database of information in Windows.  It is generally used to store configuration information for several programs.  WFTPD Pro stores its configuration in the registry.  In the "Troubleshooting" section of this manual, you will find a complete reference of the WFTPD Pro registry entries.

Restriction

In WFTPD Pro, a server or user may be restricted to a particular sub-tree of the available drive space.  If this occurs, they will not be able to leave that sub-tree by any means through WFTPD Pro.  They may, however, be able to access files through shortcuts placed in that sub-tree that point to files outside of the sub-tree.  Shortcuts that point to directories outside the user / server restriction are not accessible.

Resume / Restart

These terms are used to describe the process of continuing an interrupted transfer, whether an upload or a download.

Rights

The set of operations that are allowed to a user.  In WFTPD Pro, the rights are Read, Create, Overwrite and List.  With Read rights, you may read the contents of files, to download them.  With Create rights, you may upload new files, and create new directories.  With Overwrite rights, you can delete existing files and directories, rename them, or resume uploads to existing files.  With List rights, you may ask for a listing of files in any directory where that right is assigned.  In WFTPD Pro, these rights are assigned on a per-user, per-directory basis, and any new directory that does not have specific rights assigned will inherit its rights from its parent.  If its parent has no rights specifically assigned, then its parent's parent will be checked, and so on.  If there are still no specific rights found for the whole directory tree for this user, the original directory will be checked again from the point of view of the 'default' user.  If no rights can be found even then, all rights are allowed.  It is thus important to ensure that the default user is checked for security.

S

Server

A server is, in WFTPD, an object that listens at an IP address and port for incoming FTP connections.  WFTPD Pro can have many servers running simultaneously at different addresses and ports.

Service

Under Windows NT, a service is a program such as WFTPD Pro that runs 'in the background' - whether users are logged in or not, services keep on running.  Services' status can be checked and changed from the Services applet in the Control Panel.  You may start and stop services from there, as well as change their parameters.  WFTPD Pro may be configured further through its own applet in the Control Panel.

In TCP/IP terminology, a service is another term for a protocol such as FTP that provides an access service.

Services file

In TCP/IP, service names like "ftp", "telnet", etc, are mapped to port numbers through a "services database", or "services file".  In Windows NT, under Microsoft's TCP/IP implementation, this file is in the Windows NT SYSTEM32\Drivers\etc directory, called "SERVICES".  Each line contains a name of a service, its port number and protocol, and any aliases for that service.  There should be an entry for ftp that reads as follows:

ftp	21/tcp

Shareware

Shareware is not a type of software, as many people think - it is solely a method of marketing.  With shareware, the potential users and customers try out the software before they buy - in fact, sharing of the evaluation version of shareware is actively encouraged - hence, the name "shareware".  It is not, however, free software, and if you continue to use shareware, we recommend that you acknowledge the usefulness of each piece of shareware by following whatever registration instructions are included with the evaluation copy.  Since we are in the shareware business ourselves, we can assure you that nothing kills development on shareware better than a lack of registrations.  (Of course, nothing kills registrations like a lack of development on the program)  If you like a program enough to use it, then please pay the asking price for it.  If you cannot afford to, then you cannot afford to use the program.

Shortcut

Also known as a "link" or ".LNK" file, these are files that act as references to other files or directories.  Any time you pull up the Start Menu, you are seeing shortcuts to the actual applications that do the work for you.  WFTPD Pro now resolves shortcuts when it has to, providing you with an easy way to make disparate files available to your users in one location.  You can create these shortcuts very easily from the Windows Explorer, by right clicking in the directory where you would like your shortcut to be, then selecting "New" and "Shortcut".  Follow the prompts from there to set up your shortcut.

Socket

A socket is a term for the connection (or potential connection) between two machines, usually running TCP/IP.  Each socket must be unique, and consists of a local address and port, a remote address and port, and a protocol.  In FTP's case, the protocol is always TCP.  When a server is listening for an incoming FTP connection, it uses a socket whose local end is bound to an address and port (usually 21), but whose remote end is open to all incoming connections.

Source code

This is the program as it is written by the programmer - it's generally not distributed to the program's users, since they need the program only as it is read by the computer, in what is known as "executable" or "object" format.  The source code for WFTPD Pro is occasionally licensed out (for a price) to companies that express an interest in maintaining their investment in WFTPD Pro.  Other companies simply accept the code as it stands, and either assume that the code will continue to operate, or that we will continue to be around to maintain it.  It is certainly our intent to stay in business for many years to come, but this does rely on people registering the program, and contributing to our revenue stream.

T

TCP/IP

Short for Transmission Control Protocol / Internet Protocol, it is the networking standard on which the Internet is based.  WFTPD and WFTPD Pro require a TCP/IP-based network to operate.

U

UNC

Short for "Universal Naming Convention", a UNC is a fully specified path to a networked resource, most commonly a directory or file.  Its syntax is "\\server\share\path" - the "server" part is the name of a server on the network, the "share" part is the name of a shared resource on that server, and the "path" part (which may be empty) specifies any directories underneath that share, and perhaps also the name of a file itself.

Unix

Unix is an operating system that pre-dates Windows by quite some time – it has many features that have only recently been developed for Windows.  Many FTP sites are provided by Unix systems – hence, WFTPD has to maintain a large amount of code not required by the FTP standard to provide facilities that many FTP clients assume will be there.  Among these features are the listing format (which looks decidedly unlike a DOS listing), the command-line options that are accepted with any file listing command, and some error message numbers.

Upload

The act of sending a file to a server. In WFTPD and WFTPD Pro, the term "Uploads, etc" is often used to indicate any action that will affect the file store on the server.  For instance, deleting a file, renaming it, creating a directory, etc, are not strictly uploads, but they do affect the file store.

V

Virtual server

In WFTPD Pro, one or more "virtual servers" can be defined.  In typical FTP use, one machine will be running as one FTP server, accepting any and all incoming FTP connections, and treating them all exactly the same.  In WFTPD Pro, we allow one machine to accept incoming FTP connections on different addresses and ports, and based on the destination addresses of those connections, decide how to treat the incoming connections.  This makes one machine look like several FTP servers - each such server is known as a "virtual server".

W

Winsock

Winsock, or "Windows Sockets" as it is more properly known, is the standard by which Windows programs communicate to the TCP/IP networking layer, among others.  Before the development of Winsock, there were ten or so different TCP/IP networking providers, and at least as many different ways to access those providers.  If you wanted to write a program that worked across TCP/IP, you would have to either have horrid code that accessed all of these network providers, or choose which segment of the entire user-base you would try to address.

When the Winsock 1.1 standard was released in early 1993, it took the Windows networking world by storm.  Suddenly, all sorts of applications never before seen on Windows were being churned out by the dozen.  WFTPD was one of those applications, and indeed was the first stand-alone FTP server for Windows, released as it was in October 1993, to an FTP-starved public.

Many people lay blame for the recent huge success of the Internet at the door of the people responsible for the World Wide Web and in particular Netscape for their Navigator, and Microsoft for the Internet Explorer.  However, it is worth noting that the World Wide Web, and its main reader, Mosaic, were thought of as Unix weenies' hacker toys until they migrated to Windows - this migration was not possible before the arrival of Winsock.  Hence, it is my belief that the Internet boom is entirely due to the selfless efforts of those network providers who, in a spirit of "coopetition", decided to band together to produce a unified method of writing network programs under Windows.

[As a historical note, it is perhaps worth mentioning that Mosaic was produced at the NCSA by a group of programmers that later went on to form Netscape.  Meanwhile, the Mosaic code was licensed, through SpyGlass Inc, to Microsoft, to become the basis for the Internet Explorer]

X

Y

Z